ChatGPT解决这个技术问题 Extra ChatGPT

作曲家更新和作曲家安装有什么区别?

composer updatecomposer install 有什么区别?


M
Moppo

作曲家更新

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 会发生什么。好的描述顺便说一句。
有一天可能会咬你的重要事情 - 锁定文件不是递归的。如果某些包具有松散定义的依赖项,并且如果您碰巧在干净的机器上获取项目的干净副本,它可能会安装不同版本的嵌套依赖项,其中可能包括新的错误甚至破坏性更改!特别是与持续集成和构建服务器相关。解决方案 - 寻找嵌套有问题的包并将其固定好的版本添加到 json 和锁定文件。
那么,如何安全地更新生产服务器上的特定包?
@Michel 您应该首先在本地系统上运行 composer update 并测试您的应用程序,然后将 composer.lock 上传到您的生产服务器上并运行 composer install
这里也有很好的解释:daylerees.com/the-composer-lock-file
h
hatef

当您运行 composer install 时,它将查找锁定文件并安装其中包含的任何内容,如果找不到,它将读取 composer.json,安装其依赖项并生成锁定文件。

当您运行 composer update 时,它只是读取 composer.json、安装依赖项并更新锁定文件(或创建新的锁定文件)。


C
Community

作曲家安装

如果 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


composer install point 3 没有意义。如果 .lock 文件已经存在,它只会读取它并且永远不会“更新”它。只有当它不存在时才会创建它..
@Ben 我已经澄清了这些观点,让我知道它们现在是否有意义。
L
Linh

作曲家安装

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

除此之外,语义版本优于精确版本。我们可能会在开发过程中多次更新依赖项,并且库通常会进行一些小的更改,例如错误修复。然后更容易升级使用语义版本的依赖项。


M
Mayank Dudakiya

composer updatecomposer 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 将连同他的所有依赖项一起被删除