现实问题
之前同事做了一个 composer package,做为公司大量 laravel 项目的通用模块。
但是,在实际使用中,每个项目对改 package 的依赖版本是有所不同的。否则 composer update 会默认拉取最新的 dev-master 中的代码。
术语
VCS Version control systems (VCS)
composer 依赖的 package 版本号来自哪里
实际上就是 VCS 中的版本号,例如,git 打的 version tag。
$ git tagv1.0v1.0.1v1.0.2
composer 在识别 version 的时候,会自动过滤掉字母 ‘v’ 的前缀,所以,在打 tag 的时候,加不加 v 都是可以的。当然为了阅读方便,还是加上好。
解决方法
打 tag
git tag -a 'v2.0.0'
在 composer.json 中,除了要指明 git 项目地址之外,还需要在 require 中指定对应的版本号。
{ "repositories": [ { "type": "vcs", "url": "https://github.com/igorw/monolog" } ], "require": { "monolog/monolog": "2.0.0" }}
再执行
composer update monolog/monologUpdating monolog/monolog (dev-master cd8c225 => v2.0.0): Checking out cd8c225955
参考
https://getcomposer.org/doc/articles/versions.md