<tag> 运行"composer update <package>"时"locked at"是什么意思?



我正在尝试执行composer update <package>但收到以下错误:

请求的包<包>(锁定在,需要<版本>( 可以通过[] 来满足,但这些冲突 根据您的要求或最低稳定性。

同时,标签<tag>仅作为字符串存在于我的 composer.lock 文件中,我认为该文件仅由composer update修改,而不是读回。

我尝试运行composer why-not <package>,但它的输出并没有真正解释这个问题:

<程序> <其他版本>需要<包>(<版本>(

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

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

此提交哈希或标记将写入您的锁定文件 (composer.lock( 如果您:

  1. 运行composer update [<package>]

。或。。。

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

当您指定要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中列出更具体的约束。

最新更新