【问题标题】:composer.lock: how does it work?composer.lock:它是如何工作的?
【发布时间】:2012-05-27 07:51:17
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我还想指出,composer install,有时在已经安装时无法获得您想要的版本,作为一种解决方法,他们必须删除供应商文件夹并按顺序再次 composer install在 composer.lock 中获得正确的版本。例如安装作曲家后,我从供应商那里获得了 4.0.1 而不是 4.0.14-beta,我删除了供应商,然后再次作曲家安装,然后我得到了正确的版本 4.0.14-beta
    【解决方案2】:

    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 中的依赖信息才是最重要的。

    【讨论】:

    • 如何将所有依赖项更新为锁定文件中指定的内容(例如,将项目从 staging 转移到 live 时)?
    • 只需运行 composer.phar install - 将所有内容安装/更新/删除到锁定文件的状态
    • 在 Python 和 Ruby 中,有一个类似的概念,涉及 Gemfile.lock 和 requirements.txt。请参阅:caremad.io/blog/setup-vs-requirementyehudakatz.com/2010/12/16/… 这是否意味着对于 PHP“库”,不需要保留 compooser.lock。但是对于 PHP“应用程序”,应该提交 composer.lock 吗?
    • composer.lock 文件对库也有好处。不是针对依赖库的任何人,而是针对与库的开发人员交流他们安装了哪些版本来运行测试或调试问题的人,它还可以帮助阐明 CI 系统使用哪些版本的依赖项运行库的测试。
    • composer.lock 就像 composer.json 文件的元数据
    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-20
      • 2021-09-26
      • 2011-03-18
      • 2015-06-16
      • 2012-08-31
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多