90

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

这个锁文件不会对其他依赖它的项目产生任何影响。只对主项目有影响”

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

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

4

3 回答 3

102

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文件的力量!

于 2016-09-15T02:06:02.320 回答
83

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是最重要的。

于 2012-05-20T21:52:59.170 回答
5

锁定文件的重点是记录已安装的确切版本,以便重新安装它们。这意味着,如果您的版本规范为 1.*,并且您的同事运行composer update安装 1.2.4,然后提交 composer.lock 文件,那么当您使用时composer install,您也将获得 1.2.4,即使是 1.3.0已被释放。这可确保从事该项目的每个人都有相同的确切版本。在这里阅读更多作曲家:这都是关于锁定文件的

于 2017-06-05T05:19:38.790 回答