然而,对于如何『安装他们』,新手可能并不清楚。网上的答案有的说 composer install
,有的说composer update
,而这二者彷佛都能成功把依赖下载下来并安装好,那么他们究竟有何区别呢?php
首先要搞清楚的一件事情是,全部的依赖都定义在composer.json
中,手册中给出了一些基本用法和例子。你可能已经注意到,在指定版本号的时候,咱们并不必定要指明一个精确的版本。html
那么就有可能发生这么一个状况,对于同一份composer.json
,咱们在不一样时刻拉取到的依赖文件可能不一样(由于composer会在知足条件的状况下去拉取最新的那份依赖),从而致使一些异常状况。json
composer update
和composer install
正是为了解决这个问题而出现的。composer
composer update
的时候,composer会去读取composer.json
中指定的依赖,去分析他们,而且去拉取符合条件最新版本的依赖。composer.lock
文件中。
二、composer install
所执行的事情很是相似,只在第一步的时候有差异。当你本地若是已经存在一份composer.lock
时,composer.lock
而非composer.json
,而且以此为标准去下载依赖。composer.lock
的时候,它所作的事情和composer update
其实并无区别。
这意味着,只要你本地有一份composer.lock
,你就能够保证不管过去了多久,你都能拉到相同的依赖。而若是你把它归入你的项目的版本控制中,工具
那么你就能够确保你项目中的每个人、每一台电脑,spa
无论什么系统,都能拉取到如出一辙的依赖,以减小潜在的依赖对部署的影响。固然,请记得,你应该使用的命令是composer install
。版本控制
那何时该使用composer update
呢?当你修改了你的依赖关系,不论是新增了依赖,仍是修改了依赖的版本,又或者是删除了依赖,code
这时候若是你执行composer install
的时候,是不会有任何变动的,但你会获得一个警告信息htm
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.blog
有人可能会很好奇php是怎么知道我修改了依赖,或者composer.lock
已通过期了。很简单,若是你打开composer.lock
的话,
会发现其中有一个hash字段,这就是当时对应的那份依赖的哈希值。若是值不一致天然而然就知道发生了变动了。
这时候,你应该去经过composer update
来更新下你的依赖了。
若是你不但愿影响别的已经安装的依赖,仅仅更新你修改的部分,那你能够经过指定白名单来肯定要更新的范围,
例如composer update monolog/monolog
仅会更新monolog/monlog这个依赖,别的依赖哪怕有更新也会被忽略。
原文:https://xia.moe/archives/introduce-to-composer-install-and-update/