composer update
和composer install
之间有什么区别?
答案 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
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
文件 当前目录,处理它,以及更新,删除或安装所有 的依赖关系。
答案 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"
。
然后,它将有一些情况
composer install
,则其依赖版本可能会有所不同。如果我们总是在composer.json
中使用精确版本,例如"monolog/monolog": "1.0.1"
,该怎么办?
我们仍然需要composer.lock
,因为composer.json
仅跟踪依赖关系的主要版本,而不能跟踪依赖关系的版本。
如果所有依赖项依赖项也都使用EXACT版本怎么办?
想象一下,您从使用EXACT版本的所有依赖项开始,然后就不必关心composer.lock
。但是,几个月后,您添加了新的依赖项(或更新了旧的依赖项),并且此依赖项的依赖项不使用EXACT版本。那么最好一开始就关心composer.lock
。
此外,语义版本比精确版本有一个优势。在开发过程中,我们可能会多次更新依赖关系,并且库通常会有一些小的更改,例如错误修复。这样就可以更轻松地升级使用语义版本的依赖项。