1. Composer简介
Composer是PHP中使用最广泛的依赖管理器,通过在项目中使用Composer,可以方便地管理与项目关联的第三方PHP类库和工具包。与其他语言中的包管理器不同,Composer也可以自定义管理库的版本,避免了在不同的开发环境中因为版本不一致导致的问题。
在使用Composer之前,需要在系统中安装最新版本的Composer。Linux和MacOS系统可以使用以下命令来安装:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Windows系统可以从Composer官方网站上下载并安装Windows Installer,详细信息请参考官方文档。
2. Composer基本用法
2.1 创建Composer项目
在创建Composer项目之前,需要先在命令行中进入项目目录。假设我们要在目录/home/user/example
下创建一个新的Composer项目,可以使用以下命令:
cd /home/user/example
composer init
执行composer init
命令后,Composer会引导我们完成一个简单的配置过程,其中包含了项目的名称、描述、作者、许可证、依赖库等信息。在完成配置后,Composer会在当前目录中生成一个composer.json
文件,该文件中包含了我们刚才配置的所有信息。
2.2 添加依赖库
在Composer中,添加依赖库有两种方式:全局添加和项目添加。
全局添加可以使您在任何项目中使用,可以使用以下命令添加:
composer config --global repositories.packagist composer https://mirrors.aliyun.com/composer/
以上命令将mirrors.aliyun.com
添加为Composer的全局镜像,提升依赖库的下载效率。
项目添加依赖库,则可以通过在composer.json
文件中修改require
和require-dev
节点来实现。假设我们要添加monolog/monolog
库作为项目的依赖库,可以在composer.json
文件中添加以下内容:
"require": {
"monolog/monolog": "^2.0"
}
修改完成后,使用以下命令安装依赖:
composer install
命令执行完成后,Composer会在vendor
目录下创建一个monolog
目录,并将monolog/monolog
库以及其依赖库下载到该目录中。
2.3 更新依赖库
在项目开发过程中,依赖库的版本可能会发生变化。如果要更新当前项目中的依赖库版本,可以使用以下命令:
composer update
命令执行完成后,Composer会将依赖库更新到composer.json
文件中指定的版本。
2.4 查看依赖库信息
使用以下命令可以查看当前项目中已安装的库信息:
composer show
该命令执行完后,会列出当前项目中已安装的库名称、版本号和库的详细信息。
2.5 删除依赖库
如果我们要删除当前项目中的依赖库,可以使用以下命令:
composer remove monolog/monolog
以上命令将删除monolog/monolog
库以及其依赖库。
3. Composer高级用法
3.1 自定义依赖库安装目录
在默认情况下,Composer会将依赖库安装到项目的vendor
目录下。如果我们要将某些依赖库安装到其他目录下,可以在composer.json
文件中进行配置。例如,我们要将monolog/monolog
库安装到libs/monolog
目录下:
"config": {
"vendor-dir": "libs"
},
"require": {
"monolog/monolog": "^2.0"
}
修改vendor-dir
节点后,使用以下命令安装依赖:
composer install
该命令执行完成后,monolog/monolog
库将被安装到libs/monolog
目录中。
3.2 使用Composer自动加载类
Composer不仅可以管理依赖库,还可以自动加载类,使得PHP的类文件自动引入。
在默认情况下,Composer使用psr-4
自动加载规范来加载类。我们可以在composer.json
文件中的autoload
节点中添加以下内容,指定需要自动加载的类的命名空间和对应的路径:
"autoload": {
"psr-4": {
"Example\\": "src/"
}
}
以上配置指定了一个命名空间Example
,将该命名空间下的类文件加载到src
目录中。
为了使得Composer自动加载类,我们需要在PHP文件中调用以下语句:
require_once __DIR__.'/vendor/autoload.php';
在以上语句调用后,PHP将自动引入所有命名空间为Example
下的类文件。
3.3 自定义依赖库版本
在项目中可以使用以下方法定义需要使用的依赖库的版本:
"require": {
"monolog/monolog": "^2.0"
}
以上方法使用^
来指定依赖库的版本,^2.0
表示使用2.0及以上的版本,但是低于3.0。如果我们希望使用特定版本,可以直接指定其版本号:
"require": {
"monolog/monolog": "2.0.0"
}
除了以上两种方法,Composer还支持使用区间符号来指定依赖库的版本,例如:
"require": {
"monolog/monolog": ">1.0.0,<3.0.0"
}
以上配置表示使用版本高于1.0.0但低于3.0.0的monolog/monolog
库。
3.4 自定义依赖库源
在默认情况下,Composer使用packagist.org
作为依赖库源。但是有些时候,由于网络原因或者国内源与国外源不同步的缘故,我们需要更换依赖库源。我们可以使用以下方法修改依赖库源:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
以上命令将mirrors.aliyun.com
设置为全局依赖库源。我们也可以在composer.json
文件中指定依赖库源:
"repositories": [
{
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
}
]
以上内容将把依赖库源设置为mirrors.aliyun.com
。
3.5 自定义依赖库安装脚本
当我们安装某些连带复杂的依赖库,比如需要生成配置文件或安装扩展时,可以使用Composer提供的scripts
节点来指定自定义的脚本。
以下是一段示例代码:
"scripts": {
"post-install-cmd": [
"Example\\Installer::install"
],
"post-update-cmd": [
"Example\\Installer::update"
]
}
在以上代码中,我们在scripts
节点下添加了两个键值对:post-install-cmd
和post-update-cmd
。分别表示安装依赖库后和更新依赖库后需要执行的脚本。
在以上代码中,我们调用了一个叫做Example\\Installer
的类中的静态方法install()
和update()
。我们需要保证Example\\Installer
类和方法都存在,并且将该类所在的文件加载到PHP中。需要注意的是,在执行post-update-cmd
脚本时,会将post-install-cmd
的脚本也一同执行。
4. 编写可重用的Composer库
4.1 创建源代码
要创建一个可重用的Composer库,首先需要创建源代码。我们可以在本地或者GitHub等平台上创建一个新的Git仓库,并将源代码上传到仓库中。
4.2 创建Composer包
创建好源代码后,我们可以在composer.json
文件中添加以下内容:
{
"name": "vendor/package",
"type": "library",
"description": "Package description",
"keywords": ["package", "keywords"],
"homepage": "https://example.com",
"license": "MIT",
"authors": [
{
"name": "Author Name",
"email": "author@example.com"
}
],
"minimum-stability": "dev",
"require": {
"php": ">=7.3"
},
"autoload": {
"psr-4": {
"Vendor\\Package\\": "src/"
}
}
}
其中,name
表示包的名称,type
表示包的类型,description
表示包的描述,keywords
表示包的关键词,homepage
表示包的主页地址,license
表示包的许可证,authors
表示包的作者信息。
在以上代码中,我们还指定了PHP的最低版本号,以及自动加载规则。
4.3 打标签
在每次库代码发生重大更新时,我们需要在Git仓库中打上一个标签,以便后续版本迭代或者升级。
使用以下命令来打标签:
git tag -a 1.0.0 -m "Release version 1.0.0"
以上命令将在Git仓库中打上一个名称为1.0.0
的标签,并添加了一条消息Release version 1.0.0
。
4.4 发布到Packagist
发布到Packagist之前,我们需要先在composer.json
文件中添加repository
节点:
{
"repositories": [
{
"type": "composer",
"url": "https://packagist.org"
}
]
}
在repositories
节点中,我们添加了一个类型为composer
的依赖库,并指定其地址为https://packagist.org
。
在确认composer.json
文件的配置信息无误后,我们可以在命令行中执行以下命令发布到Packagist上:
git push --tags
以上命令将当前代码库的标签推送到Git仓库中,并加入依赖库源。在之后的开发中,我们可以使用以下命令来安装该可重用的Composer库:
composer require vendor/package
以上命令将自动从依赖库源中下载vendor/package
库,并将其依赖库自动解决依赖关系后安装到项目中。
5. 总结
Composer是PHP中非常常用的依赖管理器,可以方便地管理与项目关联的第三方PHP类库和工具包。在使用Composer时,需要了解如何创建一个Composer项目,如何添加、删除、更新以及查看依赖库信息。同时,还需要掌握如何使用Composer自动加载类、自定义依赖库版本、自定义依赖库源、自定义依赖库安装脚本等高级用法。最后,还讲解了如何创建一个可重用的Composer库,并将其发布到Packagist上供其他项目使用。