【发布时间】:2016-01-08 05:23:22
【问题描述】:
composer update 和composer install 有什么区别?
【问题讨论】:
标签: php composer-php
composer update 和composer install 有什么区别?
【问题讨论】:
标签: php composer-php
作曲家更新
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 update 并测试您的应用程序,然后将composer.lock 上传到您的生产服务器上并运行composer install
当您运行composer install 时,它会查找锁定文件并安装其中包含的任何内容,如果找不到,它将读取composer.json,安装其依赖项并生成锁定文件。
当您运行composer update 时,它只会读取composer.json,安装依赖项并更新锁定文件(或创建新的锁定文件)。
【讨论】:
composer installcomposer.lock 确实存在。
composer.lock 文件的依赖项。composer.lock 不存在不。
composer.json 安装进程包。composer.lock 文件。根据:composer help install:
install 命令从当前目录读取
composer.lock文件,对其进行处理,然后下载并安装该文件中列出的所有库和依赖项。如果文件不存在,它将查找composer.json并执行相同操作。
composer updatecomposer.json 文件的依赖项(安装、更新和删除)。composer.lock 文件。根据:composer help update:
更新命令从 当前目录,对其进行处理,然后更新、删除或安装所有 依赖关系。
【讨论】:
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"。
那么,就会有一些情况
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 文件中
如果你不能(或者不知道如何添加或删除一个实际上很简单的库,只需在文件的 require 属性中添加依赖项和版本的名称)修改 composer.json 文件手动或者您更喜欢使用命令行,composer 对此有特殊功能:
作曲家要求
例如,如果我们想通过命令行添加依赖项,我们只需执行
composer require twig/twig
作曲家移除
如果您想删除未使用的依赖项,我们将简单地执行:
composer remove twig/twig --update-with-dependencies
【讨论】: