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 update 创建的 composer.lock 文件中存储的相同依赖项将我们的应用程序安装到生产服务器或测试环境中。
当您运行 composer install
时,它将查找锁定文件并安装其中包含的任何内容,如果找不到,它将读取 composer.json
,安装其依赖项并生成锁定文件。
当您运行 composer update
时,它只是读取 composer.json
、安装依赖项并更新锁定文件(或创建新的锁定文件)。
作曲家安装
如果 composer.lock 确实存在。处理并安装 composer.lock 文件中的依赖项。如果 composer.lock 不存在。进程包从 composer.json 安装。根据已安装的包创建 composer.lock 文件。
根据:composer help install
:
install 命令从当前目录读取 composer.lock 文件,对其进行处理,然后下载并安装该文件中列出的所有库和依赖项。如果文件不存在,它将查找 composer.json 并执行相同操作。
作曲家更新
处理来自 composer.json 文件的依赖项(安装、更新和删除)。根据更改创建或更新 composer.lock 文件。
根据:composer help update
:
update 命令从当前目录读取 composer.json 文件,对其进行处理,并更新、删除或安装所有依赖项。
另请参阅:Composer: It’s All About the Lock File
作曲家安装
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 个命令。我认为它可以通过 composer.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 版本怎么办?
假设您从使用 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
Twig 将连同他的所有依赖项一起被删除
composer update
并测试您的应用程序,然后将 composer.lock 上传到您的生产服务器上并运行composer install