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


What are the differences between composer update and composer install?

composer updatecomposer 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

  1. 如果composer.lock确实存在。
    • composer.lock文件处理和安装依赖项。
  2. 如果composer.lock不存在
    • composer.json 处理软件包安装。
    • 基于已安装的包创建composer.lock文件。

根据: composer help install

install 命令从当前目录中读取composer.lock文件,对其进行处理,然后下载并安装该文件中概述的所有库和依赖项。如果文件不存在,它将查找composer.json并执行相同的操作。


composer update

  1. 处理composer.json文件中的依赖项(安装、更新和删除(。
  2. 根据更改创建或更新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 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

  • 树枝将连同他的所有依赖项一起被删除