composer install 和 composer update 的区别

前沿

项目所有的依赖都定义在 composer.json 文件中,如下图所示(composer.json 部分内容)。


我们发现,在大部分情况下,指定的某个依赖的版本号并不是非常明确,而是使用类似于正则匹配的原则。
这样就会发生这么一种情况:对于同一份 composer.json 配置文件,我们在不同时刻拉取到的依赖文件可能不同(因为 composer 会在满足匹配条件的情况下拉取最新的那个版本的依赖),这样就可能会导致不同的环境出现依赖差异,从而出现一些异常情况。

基于以上情况, 我们再来了解对于 composer 命令,update 和 install 的区别

  1. update

当你执行composer update的时候,composer会去读取composer.json中指定的依赖,去分析他们,并且去拉取符合条件最新版本的依赖。然后他会把所拉取到的依赖放入vendor目录下,并且把所有拉取的依赖的精确版本号写入composer.lock文件中。如下图所示(composer.lock 部分内容)。

  1. install

composer install所执行的事情非常类似,只在第一步的时候有差别。当你本地如果已经存在一份composer.lock时,它将会去读取你的composer.lock而非composer.json,并且以此为标准去下载依赖。当你本地没有composer.lock的时候,它所做的事情和composer update其实并没有区别。

这意味着,只要你本地有一份composer.lock,你就可以保证无论过去了多久,你都能拉到相同的依赖。而如果你把它纳入你的项目的版本控制中,那么你就可以确保你项目中的每一个人、每一台电脑,不管什么系统,都能拉取到一模一样的依赖,以减少潜在的依赖对部署的影响。当然,请记得,你应该使用的命令是::composer install::。

627