聊聊 Composer
文章目录
【注意】最后更新于 December 26, 2020,文中内容可能已过时,请谨慎使用。
composer.lock 锁文件
前几天 CI/CD 自动部署一个 PHP (Laravel 框架),这是一个 C端主项目,发生了几处问题引起的思考再这里与大家分享一下,主要有以下两点:
- 生产环境的 composer.lock 锁文件要不要加入版本控制
- 生产环境升级 composer 版本到 2.0 后的感受
目前我司的C端这个项目的 composer.lock 是忽略的(未加入到版本控制) 优点:这样做的原因还是懒,每次升级或安装了新的依赖库,再本地 composer install 后的无需关心的锁文件,多人开发时,每个人的锁文件也不会因为更新时间问题提交上来造成冲突(因为忽略文件不用提交),code review 时也关心不到,但是这样有个隐藏的问题。
缺点:就是生产环境CI/CD 执行 composer install 时,因为代码库里没有 composer.lock 的约束,每次部署项目执行安装依赖命令 composer install 都有可能造成小版本的更新,这会就造成开发环境、测试环境、生产环境,会存在使用不同版本的的代码包,导致的结果便是,开发、测试都好好的,以上生产后哐哐的报错预警。
截止目前我们已经处理两起这类事情:
- 因 symfony/mime 库的更新,如下图
将 jpeg 与 jpg 类型的索引互换了一下,在 Laravel 框架的图片验证类,还没有做更新导致中介端的所有此类型的图片均上传不了,「George」经过查找在 Laravel 6.x 版本,修复了此问题。
- 还有一次是 laravel/passport 扩展包,依赖的 lcobucci/jwt 包默默的更新了,导致生产的环境触发报警,用户不能正常登录。
解决版本,composer.json 文件约束了 lcobucci/jwt 的版本得以解决。如图
类似这样的问题,未来还会有,但是如果想做到尽可能提前知道,保持环境一致还是很有必要的,接下来我们的做法会考虑将锁文件 composer.lock 加入版本控制。
composer 2.0 体验
聊聊另外一个话题,使用 composer 2.0 的体验
本周(周四、周五)阿里云的 composer 镜像源莫名的抽风,导致个别依赖包 404,CI/CD 自动部署多次重试失败,一怒之下,取消了阿里云 composer 源,CI/CD 再执行 composer install 时,因为执行时间超过了 300s,导致部署失败,这就尴尬了,手动尝试一下,慢的给个拖油瓶一样。国内源挂了,国外源又慢的很,总不能抛弃CI/CD 手动发版?做惯了汽车谁还愿意蹬自行车,婶可忍叔不可忍,前端时间 George 已将本地 composer 版本从 1.x 升级到了 2 ,说速度极快。
果断尝试一下,以下是升级记录(很容易),而且也支持回退(放心干)。
|
|
~优点:~使用最明显的感受就是速度极快,以及内存开销也小了,以下是开发测试耗时对比示意图:
目前 composer 2.1 支持 PHP5.3 据说在 composer 2.2 之后将放弃对 PHP 7.1.3 之前的版本支持。
Finally I want to thank everyone who contributed and helped make this a reality. The 2.0 release represents over 1100 commits from 28 people, 150+ GitHub issues and pull requests, plus everyone who test it, reviewed PRs, etc. It has been a huge effort with the first commits made about two years ago.
参考链接
文章作者 BING
上次更新 2020-12-26