composer命令介绍之install和update及其区别

composer 是 php 的一个依赖管理工具。它容许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

然而,对于如何『安装他们』,新手可能并不清楚。网上的答案有的说 composer install,有的说composer update,而这二者彷佛都能成功把依赖下载下来并安装好,那么他们究竟有何区别呢?php

 

首先要搞清楚的一件事情是,全部的依赖都定义在composer.json,手册中给出了一些基本用法和例子。你可能已经注意到,在指定版本号的时候,咱们并不必定要指明一个精确的版本。html

那么就有可能发生这么一个状况,对于同一份composer.json,咱们在不一样时刻拉取到的依赖文件可能不一样(由于composer会在知足条件的状况下去拉取最新的那份依赖),从而致使一些异常状况。json

composer updatecomposer install正是为了解决这个问题而出现的。composer

 

一、当你执行composer update的时候,composer会去读取composer.json中指定的依赖,去分析他们,而且去拉取符合条件最新版本的依赖。
而后他会把所拉取到的依赖放入vendor目录下,而且把全部拉取的依赖的精确版本号写入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/

相关文章
相关标签/搜索