Composer 使用姿势
这里主要说说 composer.json
和 composer.lock
文件的作用。
composer.json
composer.json
文件包含了项目的依赖和其它的一些元数据,使用 JSON format 编写。
当初次调用 composer install
时,Composer 会根据 composer.json
文件,将定义好的依赖获取到本地项目中。
与此同时,install
命令将创建一个 composer.lock
文件到项目的根目录下。
composer.json
的写法这里不多赘述,具体可以参考 composer.json 架构。
composer.lock
安装依赖后,Composer 会把安装时确切的版本号列表写入 composer.lock
文件中。
composer.lock
的作用是让所有开发者的开发环境保持统一,因此,我们需要提交应用程序的 composer.lock
到版本库中。
若对 composer.json
文件进行了修改,则使用 composer update
来更新依赖与 composer.lock
文件。
升级指南
前置工作
根据老版本和具体要升级到的新版本,看一下官方的 升级指南 和新版本文档,了解新版本的特性和老版本变动,对不符合新版本要求的代码进行修改。
修改 composer.json
例如我要将 Lumen 升级到 5.8 版本:
"laravel/lumen-framework": "5.8.*"
修改后执行 composer update
,Composer 就会开始帮我们更新依赖。
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 5 installs, 53 updates, 0 removals- Updating symfony/polyfill-php72 (v1.10.0 => v1.11.0): Loading from cache- Updating symfony/polyfill-mbstring (v1.10.0 => v1.11.0): Loading from cache- Updating symfony/var-dumper (v4.1.7 => v4.2.8): Downloading (100%)- Updating symfony/http-foundation (v4.1.7 => v4.2.8): Downloading (100%)- Updating symfony/polyfill-ctype (v1.10.0 => v1.11.0): Loading from cache......
更新完成后会发现 composer.lock
文件变更了。
将 composer.lock
提交到版本库,保证所有开发环境的统一。
全面测试
这个不必多说了,虽然在前置工作中我们已经根据新版本的特性修改了一些代码,但无法保证程序中没有遗漏的地方。把所有的单测都跑一跑吧~
总结
- 当
composer.lock
不存在时,composer install
将根据composer.json
文件安装依赖,并创建composer.lock
文件 - 当
composer.lock
文件存在时,composer install
将直接根据composer.lock
文件拉取依赖 - 使用
composer update
更新依赖与composer.lock
文件 - 升级 = 文档研读 + 代码修改 + 全面测试
参考资料
- Composer 中文网