人人都能看懂的全栈开发教程——Composer

人人都能看懂的全栈开发教程——Composer

Chris Yue No Comment
Posts

上一篇我们有提到『自动加载』这个概念,并创建了 autoload.php 文件定义了我们项目里的自动加载方式。如果大家有花时间去官网了解 spl_autload_register 函数,就应该知道我们可以定义不只一个自动加载的规则。关于 PHP 自动加载功能的『进化』,大家可以看这篇文章(居然也是我在八年前写的了……),不但详细介绍了自动加载的发展,而且还提到了 PHP 里很重要的规范 PSR

这里先不展开 PSR,后面我们还会聊到。如果你是从八年前那篇文章回来的,那么你应该见过 Composer 了。接下来我就直接展示,在我们的这个小项目里如何用 Composer。

首先我们应该安装 Composer。多亏 Ubuntu 丰富的工具库,Ubuntu 里安装起来很容易

sudo apt install composer

然后到我们的项目根目录下,运行 composer init 命令,这个时候 composer 会问你很多问题:

Package name (<vendor>/<name>)

是问我们的项目叫什么名字,如果你在微软上班,那么项目的名字就可以叫 microsoft/minetodominetodo 是我们项目的名字,别忘了)。对于我们现在的项目来说,名字不重要,大家可以随便取。

Description []:

Author […, n to skip]:

提供简短描述以及作者。描述对于我们来说也不太重要,懒得写就空着。作者可以直接回车接受 Composer 通过你操作系统找到的用户信息,或者按 n 跳过

Minimum Stability []:

Composer 本质上是一个库管理工具,它会问你对库稳定性的最小要求时什么,这里简单提一下,稳定性可以选 stable(默认) 和 dev。这俩选项是相对的,理论上说 stable 的好处就是比 dev 更稳定,dev 的好处就是比 stable 可能包含更多的新功能。不过需要注意,虽然规定上说 stable 必须是稳定版,但实际上是不是真的『稳定』,完全是库作者说了算,这个选项只能算是个『君子协定』。这里我们直接回车,默认 stable 就行了。

Package Type (e.g. library, project, metapackage, composer-plugin) []:

项目类型。这里不做过多解释,知道我们做得是个『项目』(project)就行。

License []:

开源代码都需要表明开源许可,跟我们项目没啥关系,直接回车就行。

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]?

Would you like to define your dev dependencies (require-dev) interactively [yes]?

是否要开始安装依赖(也就是库)。我们直接 no 就行了,先不装任何库。

最后会让你确认是否生成一堆代码,也是直接回车就行。

不出意外,项目根目录下会多一个 composer.json 文件,看文件扩展名也能发现,这个文件就是我们曾经提到过的 JSON 文件。

我们虽然目前不需要安装任何第三方库,但我们可以使用 Composer 提供的自动加载功能。打开 composer.json 文件,在靠近结尾处添加下面代码:

{
    ...
    "require": {},
    "autoload": {
        "psr-4": {
            "": ""
        }
    }
}

注意 require 那一行。这一行内容是自动生成的,但因为我们要添加新的项,所以要在第三行后面增加一个逗号。这个逗号很容易被遗忘。

Composer 的自动加载的配置方法,大家也请参考官方文档。总之我们这里的意思是,如果按每个库自己的自动加载规则还找不到某个类,就在当前目录下尝试按 PSR-4 的规定去找,因为我们的类和接口,都满足 PSR-4 规定(简单说来就是如果类名是 Foo\Bar\Foobar,那么路径就是 Foo/Bar/Foobar.php),所以跟之前自己写的 autoload.php 是一样的效果。

在命令行执行

composer dump-autoload

此命令正常运行会生成 vendor 目录,并且包含一个 vendor/autoload.php 文件。

删除我们自己写的 autoload.php ,让 console/register.php 改成加载 vendor/autoload.php 文件,执行上一章添加用户的命令,不出意外依然能运行。

最后简单说介绍一下,Composer 也是最近十年才有的东西。在没有 Composer 的那个时候,要添加一个第三方库,是十分麻烦的,需要自己去找,自己去下载,自己加载,关键还有库跟库的依赖的问题,就更麻烦了。有了 Composer 之后,就是一行命令的事情,可以说 Composer 的出现是在某种程度上促进了 PHP 生态的发展(虽然像 Ruby,Python 那些早就有了……)。

最后我们尝试安装一个下一章用得上的库 PHPUnit,也算是先测试一下网速

composer require phpunit/phpunit -vvv

注意 -vvv 是用来打印『更详尽的信息』的,v 即 verbose 的意思。三个 v 就是最详尽,万一卡了可以看看卡在什么地方,是不是因为下载慢。跟 Ubuntu 的 APT 安装软件需要读取软件信息和依赖信息一样,Composer 也需要下载库索引来判断库的下载地址等信息。但因为国内特殊的网络环境,可能不太理想……这也就不多说了,大家都懂的。如果是这种情况,就使用镜像吧。百度里搜索『Composer 镜像』就能出来好几个,如何使用人家也写得很详细,这里就不再提供链接以及使用方式了。

完整的 composer.json 文件可见这里

人人都能看懂的全栈开发教程——Composer by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

写作累,服务器还越来越贵
求分担,祝愿好人一生平安
天使打赏人

发表评论

78 + = 86