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

时间:2015-10-10 09:03:42

标签: php composer-php

composer updatecomposer install之间有什么区别?

4 个答案:

答案 0 :(得分:223)

作曲家更新

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文件中指定的内容升级项目包,

  • <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT employees (Efirstname, Elastname, Etitle, Ephone, Eemail)> <!ELEMENT Efirstname (#PCDATA)> <!ELEMENT Elastname (#PCDATA)> <!ELEMENT Etitle (#PCDATA)> <!ELEMENT Ephone (#PCDATA)> <!ELEMENT Eemail (#PCDATA)> 主要用于部署阶段&#39;使用存储在composer update创建的composer.lock文件中的相同依赖项,在生产服务器或测试环境中安装我们的应用程序。

答案 1 :(得分:52)

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

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

答案 2 :(得分:17)

composer install

  1. 如果composer.lock确实存在。
    • 处理并安装composer.lock文件中的依赖项。
  2. 如果composer.lock 存在。
    • 处理包安装自composer.json
    • 根据已安装的软件包创建composer.lock文件。
  3. 根据:composer help install

      

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

    composer update

    1. 处理来自composer.json文件的依赖项(安装,更新和删除)。
    2. 根据更改创建或更新composer.lock文件。
    3. 根据:composer help update

        

      update命令从中读取composer.json文件   当前目录,处理它,以及更新,删除或安装所有   的依赖关系。

      另请参阅:Composer: It’s All About the Lock File

答案 3 :(得分:2)

作曲家安装

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中使用精确版本,例如"monolog/monolog": "1.0.1",该怎么办?
我们仍然需要composer.lock,因为composer.json仅跟踪依赖关系的主要版本,而不能跟踪依赖关系的版本。

如果所有依赖项依赖项也都使用EXACT版本怎么办?
想象一下,您从使用EXACT版本的所有依赖项开始,然后就不必关心composer.lock。但是,几个月后,您添加了新的依赖项(或更新了旧的依赖项),并且此依赖项的依赖项不使用EXACT版本。那么最好一开始就关心composer.lock

此外,语义版本比精确版本有一个优势。在开发过程中,我们可能会多次更新依赖关系,并且库通常会有一些小的更改,例如错误修复。这样就可以更轻松地升级使用语义版本的依赖项。