composer update和composer install之间有什么区别?

Daw*_*usi 143 php composer-php

composer update和之间有什么区别composer install

Mop*_*ppo 255

作曲家更新

composer update 将按照指定更新您的依赖性 composer.json

例如,如果您需要此包作为依赖项:

"mockery/mockery": "0.9.*",
Run Code Online (Sandbox Code Playgroud)

并且您实际上已经安装了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 install,您没有描述将会是什么.很好的描述顺便说一句. (5认同)
  • @Michel您应该首先在本地系统上运行“composer update”并测试您的应用程序,然后在生产服务器上上传composer.lock并运行“composer install” (3认同)
  • 有一天可能会咬你一口的重要事情 - 锁定文件不是递归的。如果某些包具有松散定义的依赖项,并且您碰巧在干净的计算机上获取了项目的干净副本,则它可能会安装不同版本的嵌套依赖项,其中可能包括新的错误甚至重大更改!尤其与持续集成和构建服务器相关。解决方案 - 寻找嵌套的有问题的包并将其修复的良好版本添加到 json 和锁定文件中。 (2认同)
  • 那么,如何安全地更新生产服务器上的特定包? (2认同)

Tim*_*han 53

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

当你运行composer update时,它只需读取composer.json,安装依赖项并更新lockfile(或创建一个新的lockfile).


ken*_*orb 18

composer install

  1. 如果composer.lock确实存在.
    • 处理并安装composer.lock文件中的依赖项.
  2. 如果composer.lock确实存在.
    • 流程包安装自composer.json.
    • composer.lock根据安装的包创建文件.

按照composer help install:

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


composer update

  1. 处理composer.json文件中的依赖项(安装,更新和删除).
  2. composer.lock根据更改创建或更新文件.

按照composer help update:

update命令composer.json从当前目录读取文件,对其进行处理,并更新,删除或安装所有依赖项.


另请参阅:Composer:关于锁定文件的全部内容


Pha*_*inh 12

作曲家安装

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
}
Run Code Online (Sandbox Code Playgroud)

作曲家更新

composer update = remove composer.lock -> composer install
Run Code Online (Sandbox Code Playgroud)

为什么我们需要 2 个命令。我觉得可以用composer.lock来解释。

想象一下,我们在 中没有和,存在依赖关系或。 那么,就会有一些情况 composer.lockcomposer.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 版本怎么办?
想象一下,您从使用确切版本的所有依赖项开始,然后您不关心composer.lock. 但是,几个月后,您添加了新的依赖项(或更新旧的依赖项),并且此依赖项的依赖项不使用 EXACT 版本。那么还是关心一下比较好composer.lock一开始就照顾好。

除此之外,语义版本比精确版本还有一个优点。我们在开发过程中可能会多次更新依赖项,并且库经常会有一些小的变化,例如错误修复。那么使用语义版本升级依赖就更容易了。


May*_*iya 8

composer update和之间的最佳区别composer install

作曲家安装

要添加依赖项,您需要手动将其添加到composer.json 文件中。

如果composer.lock文件存在,请准确安装该文件中指定的内容

  • 否则,读取composer.json文件以查看需要安装哪些依赖项
  • 用项目的信息(安装的依赖项)编写composer.lock

不会使用此命令更新任何组件。

作曲家更新

要添加或删除依赖项,您需要手动将其添加到composer.json文件中

  • composer.lock 文件将被忽略
  • 将安装并更新composer.json文件依赖项(如果未安装依赖项,则会下载该依赖项)

如果您不能(或者不知道如何添加或删除库,这实际上很简单,只需在文件的 require 属性中添加依赖项的名称和版本)手动修改composer.json 文件,或者您更喜欢使用命令行,composer 为此提供了特殊的功能:

作曲家要求

例如,如果我们想使用命令行添加依赖项,我们只需执行

composer require twig/twig

  • composer.json 文件将自动修改并添加新的依赖项
  • 依赖项将被下载到项目中

作曲家删除

如果您想删除未使用的依赖项,我们将简单地执行:

composer remove twig/twig --update-with-dependencies

  • Twig 及其所有依赖项将被删除