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

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

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

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

还是像人们对依赖关系管理器所期望的那样,这意味着相反的意思?


答案 1

composer.lock记录安装的确切版本。这样你和你的同事就在同一个版本里。

作曲家安装

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

作曲家更新

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

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

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

  • 提交你的 GIT(或你拥有的 vcs)composer.lock
  • 要求其他人获取该文件的版本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

作曲家依赖关系在 中定义。首次运行 Composer 安装时,或者运行 Composer 更新时,将创建一个名为的锁定文件。composer.jsoncomposer.lock

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

锁定文件始终包含确切的版本号,并且对于将测试的版本传达给同事或在发布应用程序时非常有用。对于库来说,其中的依赖关系信息才是最重要的。composer.json


推荐