composer.lock:它是如何工作的?

时间:2012-05-20 15:15:26

标签: php dependency-management package-managers composer-php

我正在尝试理解这一部分:http://getcomposer.org/doc/02-libraries.md#lock-file

  

此锁定文件不会对依赖它的其他项目产生任何影响。它只对主项目“

产生影响

这是否意味着如果项目P依赖于库A,而库A依赖于库B v1.3,项目P将不关心库B的版本,并且可能会安装B 1.4而不是?那有什么意义呢?

或者它是否意味着相反,正如人们对依赖管理器所期望的那样?

3 个答案:

答案 0 :(得分:63)

Composer依赖项在composer.json中定义。第一次运行composer install时,或者在运行composer update时,将创建一个名为composer.lock的锁定文件。

引用的文档仅涉及锁定文件。如果您的项目P依赖于库A而A取决于B v1.3。***,那么如果A包含一个锁定文件,说有人运行“composer update”导致安装了B v1.3.2,那么在项目中安装A P可能仍然安装1.3.3,因为composer.json(不是.lock!)将依赖关系定义为1.3。*。

锁定文件始终包含确切的版本号,对于将您测试的版本与同事或发布应用程序进行通信非常有用。对于库,composer.json中的依赖关系信息非常重要。

答案 1 :(得分:37)

composer.lock记录已安装的确切版本。因此,您与同事的版本相同。

作曲家安装

  • 检查composer.lock档案
  • 如果没有,请自动生成composer.lock文件(使用composer update
  • 安装composer.lock文件
  • 中记录的指定版本

作曲家更新

  • 浏览composer.json文件
  • 根据提到的版本标准检查新版本(最新版本)的可用性(例如1.12。*)
  • 安装最新版本(根据上述版本)
  • 使用已安装的版本更新composer.lock文件

所以在一个简单的检查清单中。

如果您想让所有同事保持与您相同的版本......

  • 将您的composer.lock提交给GIT(或您拥有的vcs)
  • 要求其他人获取composer.lock档案
  • 的版本
  • 始终使用 composer install来获取正确的依赖关系

如果要将系统依赖关系升级到新版本

  • 检查composer.json文件以获取版本规范。
  • 执行composer update
  • 这将更改composer.lock文件的最新版本
  • 将其提交给GIT(或vcs)
  • 让别人知道并composer install

以下将是一个非常好的阅读
https://blog.engineyard.com/2014/composer-its-all-about-the-lock-file

享受composer.lock档的力量!

答案 2 :(得分:3)

锁定文件的目的是记录安装的确切版本,以便重新安装。这意味着,如果您的版本规范为1. *并且您的同事运行安装1.2.4的composer update,然后提交composer.lock文件,那么当您composer install时,您也将获得1.2.4,即使1.3.0已经发布。这确保了在项目上工作的每个人都具有相同的确切版本。点击此处Composer: It’s All About the Lock File