在作曲家中“锁定在” <tag>的含义是什么

时间:2019-08-08 13:54:35

标签: composer-php

尝试执行composer update <package>,但出现以下错误:

  

请求的软件包(锁定在,需要    []可以满足dev- ),但这些冲突   符合您的要求或最低稳定性。

与此同时,标记<tag>仅作为字符串存在于我的composer.lock文件中,我认为其中仅由composer update对其进行了修改,但未被读取。

在这种情况下,“锁定”是什么意思,我该如何解决这个问题?


composer why-not <package>说:

  

<程序> 3.0.8.1要求<程序包>(dev- <分支>)

这对我不是很有帮助

2 个答案:

答案 0 :(得分:3)

当您为 composer update 指定包名称(例如 composer update somevendor/somepackage)时,您是在告诉 Composer 您要更新该包并将其他所有内容保留在当前版本 - 您想“锁定”所有其他软件包所在的位置,然后只更新一个。

只有当您指定的软件包的新版本与那些已安装的软件包兼容时,这才有效。如果新版本需要其他东西的较新版本,或者列出它与特定版本“冲突”,Composer 只会告诉您它不能这样做。

其他软件包“锁定”的版本存储在 composer.lock 文件中,但您永远不应手动编辑该文件。

您有几种方法可以告诉 Composer 允许更新哪些包:

  • 一次更新多个特定软件包以解决特定问题:composer update somevendor/somepackage somethingelse/somedependency
  • 更新所选包及其所有依赖项除了直接在 composer.json 中列出的那些composer update somevendor/somepackage --with-dependencies
  • 更新所选包及其所有依赖项composer update somevendor/somepackage --with-all-dependencies
  • 只需更新所有内容:composer update 不带任何参数

所有这些命令仍会遵守您在 composer.json 中手动指定的版本限制,您只是在命令行上向 Composer 附加 提供有关允许使用哪些软件包的说明更新以满足这些限制。

就我个人而言,我主张只运行不带参数的 composer update:如果您想更严格地控​​制某些内容何时更新,您始终可以在 composer.json 中列出更具体的约束。

答案 1 :(得分:2)

该软件包已被锁定,这意味着与版本约束dev-<branch>一起使用的分支上的最后一次提交的提交哈希是在composer update的最后一次运行中保存的。锁定文件以确保确定性(可重现)在部署时进行构建。

如果您执行以下操作,则此提交哈希或标记将写入您的锁定文件(composer.lock):

  1. 运行composer update [<package>]

...或...

  1. composer install存在的情况下运行composer.json,但在作曲家的当前目录中没有锁定文件,该文件会自动生成锁定文件