Answers:
作曲家更新
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更新创建的composer.lock文件中的相同依赖项,将我们的应用程序安装在生产服务器或测试环境上。
composer global update
更新本地系统上全局存储库中的依赖项(COMPOSER_HOME
env变量)
composer update
在本地系统上运行并测试您的应用程序,然后将composer.lock上传到生产服务器上并运行composer install
运行时composer install
,它将查找一个锁定文件并安装其中包含的所有内容,如果找不到该文件,它将读取composer.json
,安装其依赖项并生成一个锁定文件。
运行时,composer update
它只会读取composer.json
,安装依赖项并更新锁定文件(或创建新的锁定文件)。
composer install
composer.lock
确实存在。
composer.lock
文件中的依赖项。composer.lock
确实不存在。
composer.json
。composer.lock
根据已安装的软件包创建文件。根据composer help install
:
install命令
composer.lock
从当前目录读取文件,进行处理,然后下载并安装该文件中概述的所有库和依赖项。如果文件不存在,它将查找composer.json
并执行相同的操作。
composer update
composer.json
文件中的依赖项(安装,更新和删除)。composer.lock
根据更改创建或更新文件。根据composer help update
:
update命令
composer.json
从当前目录读取文件,进行处理,然后更新,删除或安装所有依赖项。
另请参阅:作曲家:全部关于锁定文件
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
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
在不同的时间运行,他们可能具有不同的依赖版本。如果我们总是使用EXACT版本,composer.json
例如"monolog/monolog": "1.0.1"
?
我们仍然需要,composer.lock
因为composer.json
仅跟踪依赖关系的主版本,而不能跟踪依赖关系的版本。
如果所有依赖项依赖项也都使用EXACT版本,该怎么办?
想象一下,您从使用完全版本的所有依赖项开始,然后您不在乎composer.lock
。但是,几个月后,您添加了一个新的依赖项(或更新了旧的依赖项),并且此依赖项的依赖项不使用EXACT版本。那么最好composer.lock
一开始就关心。
除此之外,语义版本优于确切版本。在开发过程中,我们可能会多次更新依赖关系,并且库通常会有一些小的更改,例如错误修复。这样就更容易升级使用语义版本的依赖项。