composer update
和composer install
有什么区别?
曲家更新
composer update
将按照composer.json
中的规定更新您的声明
例如,如果需要此包作为依赖项:
"mockery/mockery": "0.9.*",
并且您实际上已经安装了该软件包的0.9.1
版本,运行composer update
将导致此软件包的升级(例如,如果它已经发布,则升级到0.9.2
(
详细地说,composer update
将:
- 阅读
composer.json
- 删除
composer.json
中不再需要的已安装软件包 - 检查所需软件包的最新版本的可用性
- 安装最新版本的软件包
- 更新
composer.lock
以存储已安装的软件包版本
作曲家安装
composer install
不会更新任何内容;它只会安装composer.lock
文件中指定的所有依赖项
详细地:
- 检查
composer.lock
文件是否存在(如果不存在,它将运行composer update
并创建它( - 读取
composer.lock
文件 - 安装
composer.lock
文件中指定的软件包
何时安装和更新
composer update
主要用于"开发阶段",根据我们在composer.json
文件中指定的内容升级我们的项目包,composer install
主要用于"部署阶段",以在生产服务器或测试环境中安装我们的应用程序,使用存储在Composer.Lock文件中的相同依赖项 Composer 更新创建。
当你运行composer install
时,它会寻找一个锁定文件并安装其中包含的任何内容,如果找不到,它将读取composer.json
,安装其依赖项并生成一个锁定文件。
当您运行composer update
时,它只是读取composer.json
,安装依赖项并更新锁定文件(或创建新的锁定文件(。
composer install
- 如果
composer.lock
确实存在。- 从
composer.lock
文件处理和安装依赖项。
- 从
- 如果
composer.lock
不存在。- 从
composer.json
处理软件包安装。 - 基于已安装的包创建
composer.lock
文件。
- 从
根据: composer help install
:
install 命令从当前目录中读取
composer.lock
文件,对其进行处理,然后下载并安装该文件中概述的所有库和依赖项。如果文件不存在,它将查找composer.json
并执行相同的操作。
composer update
- 处理
composer.json
文件中的依赖项(安装、更新和删除(。 - 根据更改创建或更新
composer.lock
文件。
根据: composer help update
:
update
composer.json
命令从 当前目录,处理它,并更新、删除或安装所有 依赖。
另请参阅:作曲家:一切都与锁定文件有关
作曲家安装
if(composer.lock existed){
installs dependency with EXACT version in composer.lock file
} else {
installs dependency with LATEST version in composer.json
generate the composer.lock file
}
作曲家更新
composer update = remove composer.lock -> composer install
为什么我们需要 2 个命令。我认为这可以通过作曲家.lock来解释。
想象一下,我们没有composer.lock
,在composer.json
中,有一个依赖"monolog/monolog": "1.0.*"
或"monolog/monolog": "^1.0"
。
然后,它将有一些案例
- 我们今天使用当前的依赖项版本(例如:1.0.0(运行良好,但有一些几个月后,依赖项更新(例如:1.0.1(并且可能存在一些错误
- 如果另一个团队成员在不同的时间运行
composer install
,则他们可能具有不同的依赖项版本。
如果我们总是在composer.json
中使用 EXACT 版本怎么办,例如 "monolog/monolog": "1.0.1"
?
我们仍然需要composer.lock
,因为composer.json
只跟踪你的依赖项的主版本,它无法跟踪依赖项的版本。
如果依赖项的所有依赖项也使用 EXACT 版本怎么办?
想象一下,您从所有使用确切版本的依赖项开始,然后您不关心composer.lock
。但是,几个月后,您添加了一个新的依赖项(或更新旧的依赖项(,并且此依赖项的依赖项不使用 EXACT 版本。那么最好一开始就关心composer.lock
。
除此之外,语义版本比精确版本还有一个优势。我们可能会在开发过程中多次更新依赖项,并且库通常会有一些小的更改,例如错误修复。然后,升级使用语义版本的依赖项会更容易。
composer update
和 composer install
之间的最佳区别
作曲家安装
要添加依赖项,您需要手动将其添加到 composer.json 文件中。
如果 composer.lock 文件存在,请准确安装此文件上指定的内容
- 否则,请阅读 composer.json 文件以查找需要安装哪些依赖项
- 使用项目的信息编写 composer.lock(已安装的依赖项(
不会使用此命令更新任何组件。
作曲家更新
要添加或删除依赖项,您需要手动将其添加到 composer.json 文件中
- composer.lock 文件将被忽略
- 将安装和更新 composer.json 文件依赖项(如果未安装依赖项,则将下载 (
如果您不能(或者不知道如何添加或删除实际上很容易的库,只需在文件的require属性中添加依赖项和版本的名称(手动修改composer.json文件,或者您更喜欢使用命令行,composer对此具有特殊功能:
作曲家要求
例如,如果我们想使用命令行添加依赖项,我们将简单地执行
composer require twig/twig
- composer.json文件将自动修改,并添加新的依赖项
- 依赖项将下载到项目中
作曲家删除
如果您想删除未使用的依赖项,我们将简单地执行:
composer remove twig/twig --update-with-dependencies
- 树枝将连同他的所有依赖项一起被删除