compoesr
的require
/update
都可以更新指定的依赖包(升级/降级)。
require
更为灵活些,未安装则进行安装,已安装则根据传入的版本号进行升级
或降级
。update
则无法在命令行传入指定的版本号
,需要先手动编辑composer.json
,指定新的版本号
,然后执行更新命令。
#忽略
composer require google/protobuf --ignore-platform-reqs -vvv
require 命令
示例
// 安装包
composer require hashids/hashids:2.0.0
// 已安装 升级
composer require hashids/hashids:3.0.0
// 已安装 降级
composer require hashids/hashids:2.0.4
update 命令
update
命令无法在命令行中指定包版本号
,需要手动修改composer.json
文件
// 安装包
composer require hashids/hashids:2.0.0
错误用法
composer update hashids/hashids:3.0.0
正确用法示例
vim composer.json
"require": {
"hashids/hashids": "3.0.0"
},
:wq
#升级到3.0.0
composer update hashids/hashids
vim composer.json
"require": {
"hashids/hashids": "2.0.4"
},
:wq
#降级到2.0.4
composer update hashids/hashids
同时,如果我们编辑更新了多个包的版本号,则无法使用 composer update package1
composer update package2
composer update package3
的方式去依次的更新,因为composer
会校验配置文件的完整性json vs lock
,你指定要我更新A
,但你B
的version
在json
和lock
中不一致,你却不要我更新它,这是有问题的。
这时只能使用composer update
全局更新依赖,注意是全局包的更新操作,一些你未更改但使用了版本号范围的包也有可能被更新升级,请慎用!
install 命令
install
可以用于项目初始化后,初次安装依赖,且会优先读取composer.lock
中的版本号,以尽可能的保证协作开发中包版本的一致性。
composer.lock
中存有的包版本记录相当于执行 composer require packageName:versionNo
,不存有的相当于执行composer update packageName with versionRule in composer.json
。
当我们协同开发时,A 在本地安装了新的依赖包,或者更新了依赖包,会写入 composer.lock/composer.json
,A 上传至仓库,B 拉取至本地后,应执行一次 composer install
来同步团队的版本变更。
所以协作开发中,我们建议要同时将composer.lock/composer.json
上传至远端仓库。
版本号范围
大于/大于等于:>1.2.3 >=1.2.3
小于/小于等于:<1.2.3 <=1.2.3
确切的版本号:1.2.3
~1.2.3: 1.2.3 <= version < 1.3
^1.2.3: 1.2.3 <= version < 2.0
{
"php": ">=7.0",
"ext-swoole": ">=4.0.0",
"lib-curl": ">=7.29.0"
}