作曲家更新和作曲家安装有什么区别?

新手上路,请多包涵

composer updatecomposer install 有什么区别?

原文由 Dawlatzai Ghousi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 452
2 个回答

作曲家更新

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 文件中存储的相同依赖项。

原文由 Moppo 发布,翻译遵循 CC BY-SA 4.0 许可协议

作曲家安装

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 来解释。

想象一下,我们没有---- 3B2916299AAE9492FFC3686FFCB00C7E 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" 中使用 EXACT 版本怎么办?

我们仍然需要 composer.lock 因为 composer.json 只跟踪你的依赖的主版本,它不能跟踪依赖的依赖版本。

如果依赖项的所有依赖项也使用 EXACT 版本怎么办?

想象一下,您从使用 EXACT 版本的所有依赖项开始,然后您不关心 composer.lock 。但是,几个月后,您添加了一个新依赖项(或更新旧依赖项),并且此依赖项的依赖项不使用 EXACT 版本。那么最好在开头关心 composer.lock

除此之外,语义版本优于精确版本。我们可能会在开发过程中多次更新依赖项,并且库通常会进行一些小的更改,例如错误修复。然后更容易升级使用语义版本的依赖项。

原文由 Linh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题