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


76

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

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

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

还是像从依赖管理器中所期望的那样相反?

Answers:


76

Composer依赖项在中定义composer.json。首次运行composer时,或者运行composer更新时,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就很重要。


如何将所有依赖关系更新为锁定文件中指定的依赖关系(例如,将项目从暂存转移到实时状态时)?
Petah

5
只需运行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吗?
CMCDragonkai 2013年

composer.lock文件也可能对库有益。不是针对依赖库的任何人,而是针对库开发人员,他们与他们交流安装了哪个版本以运行测试或调试问题,它还可以帮助澄清CI系统为库进行测试所依赖的版本。
naderman '16

composer.lock就像是元数据composer.json文件
克什米尔

68

composer.lock记录已安装的确切版本。这样您就可以与同事使用相同的版本。

作曲家安装

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

作曲家更新

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

因此,在一个简单的清单中。

如果您想让所有同事使用与您相同的版本...

  • 提交您composer.lock的GIT(或您拥有的vc)
  • 要求其他人获取该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文件的力量!


1
我还想指出,作曲家的安装有时无法获得您想要的版本,而作为一种解决方法,他们必须删除供应商文件夹并再次进行作曲家的安装才能在作曲家中获得正确的版本。锁。例如,在安装作曲家之后,我从供应商那里得到了4.0.1而不是4.0.14-beta,我删除了供应商,然后再次进行了作曲家安装,然后我得到了正确的版本4.0.14-beta
PauAI

3

锁定文件的目的是记录已安装的确切版本,以便可以重新安装它们。这意味着,如果您的版本规格为1. *,并且您的同事运行时composer update安装了1.2.4,然后提交了composer.lock文件,那么当您使用时composer install,即使1.3.0,您也会得到1.2.4。已发布。这可以确保每个人都参与这个项目具有完全相同的version.Read更多在这里作曲:这是所有关于锁定文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.