正确的 Composer 扩展包安装方法

问题说明

我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,使用 composer update 这个命令

在我们现在的逻辑中,可能会对项目造成巨大伤害。

因为 composer update 的逻辑是按照 composer.json 指定的扩展包版本规则,把所有扩展包更新到最新版本,注意,是 所有扩展包,举个例子,你在项目一开始的时候使用了 monolog,当时的配置信息是

安装的是 monolog 1.1 版本,而一个多月以后的现在,monolog 已经是 1.2 了,运行命令后直接更新到 1.2,这时项目并没有针对 1.2 进行过测试,项目一下子变得很不稳定,情况有时候会比这个更糟糕,尤其是在一个庞大的项目中,你没有对项目写完整覆盖测试的情况,什么东西坏掉了你都不知道。

那应该使用哪个命令呢?install, update 还是 require ?

简单解释

新项目流程

  • 创建 composer.json,并添加依赖到的扩展包;
  • 运行 composer install,安装扩展包并生成 composer.lock;
  • 提交 composer.lock 到代码版本控制器中,如:git;

项目协作者安装现有项目

克隆项目后,根目录下直接运行 composer install 从 composer.lock 中安装 指定版本 的扩展包以及其依赖

composer.lock 文件里保存着对每一个代码依赖的版本记录,提交到版本控制器中,并配合composer install 使用,保证了团队所有协作者开发环境、线上生产环境中运行的代码版本的一致性。

此流程适用于生产环境代码的部署。

为项目添加新扩展包

准备添加一个扩展包,install, update, require 三个命令都可以用来安装扩展包,选择哪一个才是正确的呢?

原有项目新添加扩展的,都使用 composer require new/package 这种方式来安装。
提交更新后的 composer.json 和 composer.lock 到代码版本控制器中,如:git;

需要加版本的话

有时候你之前使用过的扩展包,加入了新功能,你想更新单独这个扩展包到指定版本,也可以使用 require 来操作。