此篇文章同时发布在知乎专栏 前端后端客户端,专栏专注于前端、后端、客户端开发的技术分享与探讨,欢迎关注。

Composer 使用姿势

这里主要说说 composer.jsoncomposer.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 版本:

1
"laravel/lumen-framework": "5.8.*"

修改后执行 composer update,Composer 就会开始帮我们更新依赖。

1
2
3
4
5
6
7
8
9
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 文件
  • 升级 = 文档研读 + 代码修改 + 全面测试

参考资料