编写器更新和安装之间有什么区别?
当前回答
当你运行composer install时,它会寻找一个锁文件并安装其中包含的任何文件,如果找不到,它就会读取composer。Json,安装它的依赖项并生成一个锁文件。
当你运行composer update时,它只是读取composer。Json,安装依赖项并更新lockfile(或创建一个新的lockfile)。
其他回答
编写器更新和安装之间的最大区别
作曲家安装
要添加依赖项,您需要手动将其添加到编写器中。json文件。
如果作曲家。锁文件存在,安装这个文件中指定的东西
否则读作曲家。Json文件,看看需要安装什么依赖 写作曲家。锁定项目信息(已安装的依赖项)
此命令不会更新任何组件。
作曲家更新
要添加或删除依赖项,您需要手动将其添加到编写器中。json文件
作曲家。锁定文件将被忽略 作曲家。Json文件依赖将被安装和更新(如果一个依赖没有被安装,它将被下载)
如果你不能(或者不知道如何添加或删除一个库,这实际上很简单,只需在文件的require属性中添加依赖项的名称和版本)修改编写器。Json文件手动或你更喜欢使用命令行代替,作曲家有特殊的功能:
作曲家要求
例如,如果我们想在命令行中添加依赖项,我们只需执行即可
作曲家需要树枝/细枝
作曲家。Json文件将被自动修改,并添加新的依赖项 依赖项将被下载到项目中
作曲家删除
如果你想删除一个未使用的依赖项,我们将简单地执行:
编译器删除twig/twig—update-with-dependencies
将删除Twig及其所有依赖项
作曲家安装
如果作曲家。锁确实存在。 处理并安装来自编写器的依赖项。锁文件。 如果作曲家。锁不存在。 从composer.json安装流程包。 创建作曲家。根据安装的包锁定文件。
按照:作曲者帮助安装:
install命令读取编写器。锁文件从当前目录,处理它,并下载和安装该文件中概述的所有库和依赖项。如果文件不存在,它将寻找作曲家。Json,并执行相同的操作。
作曲家更新
处理来自编写器的依赖项。Json文件(安装,更新和删除)。 创建或更新编写器。根据更改锁定文件。
作曲人帮助更新:
update命令读取编写器。Json文件。 当前目录,处理它,并更新、删除或安装所有 依赖关系。
参见:作曲家:这都是关于锁文件
作曲家更新
Composer update会更新你在Composer .json中指定的依赖项
例如,如果你需要这个包作为依赖项:
"mockery/mockery": "0.9.*",
如果你已经安装了0.9.1版本的包,运行composer update将导致该包的升级(例如,如果它已经发布,则升级到0.9.2)
详细的作曲家更新将:
读composer.json 在composer.json中删除已安装的不再需要的包 检查所需软件包的最新版本的可用性 安装软件包的最新版本 更新的作曲家。锁定存储已安装包的版本
作曲家安装
Composer安装不会更新任何东西;它只会安装编译器中指定的所有依赖项。锁文件
详细:
检查是否是作曲家。锁文件存在(如果不存在,它将运行composer update并创建它) 读作曲家。锁文件 安装编写器中指定的包。锁文件
什么时候安装,什么时候更新
Composer更新主要用于“开发阶段”,根据我们在Composer中指定的内容升级我们的项目包。json文件, Composer install主要用于“部署阶段”,在生产服务器或测试环境上安装应用程序,使用存储在Composer中的相同依赖项。由编写器更新创建的锁文件。
作曲家安装
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
为什么我们需要两个命令。我认为可以用composer.lock来解释。
想象一下,我们没有作曲家。锁定作曲者。Json中,有一个依赖项“monolog/monolog”:“1.0.”*"或"monolog/monolog": "^1.0"。 然后,它会有一些情况
我们今天在当前的依赖版本(例如:1.0.0)上工作得很好 几个月后,依赖更新(例如:1.0.1),它可能有一些错误 如果另一个团队成员在不同的时间运行编写器安装,则他们可能具有不同的依赖项版本。
如果我们总是在composer中使用EXACT版本呢?Json,如“monolog/monolog”:“1.0.1”? 我们仍然需要作曲家。锁是因为作曲家。Json只跟踪你依赖的主版本,它不能跟踪依赖的依赖版本。
如果依赖项的所有依赖项也使用EXACT版本呢? 假设你从使用EXACT版本的ALL依赖开始,那么你就不关心composer.lock了。然而,几个月后,您添加了一个新的依赖项(或更新旧的依赖项),这个依赖项的依赖项不使用EXACT版本。那么最好是照顾作曲家。在开始时锁定。
除此之外,语义版本比精确版本还有一个优势。在开发过程中,我们可能会多次更新依赖项,库中经常会有一些小的变化,比如bug修复。使用语义版本的依赖更容易升级。
当你运行composer install时,它会寻找一个锁文件并安装其中包含的任何文件,如果找不到,它就会读取composer。Json,安装它的依赖项并生成一个锁文件。
当你运行composer update时,它只是读取composer。Json,安装依赖项并更新lockfile(或创建一个新的lockfile)。