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

Fer*_*ito 5 php composer-php

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

请求的包 <package>(锁定在 <tag>,要求为 <version>)由 <package>[<tag>] 满足,但这些与您的要求或最低稳定性相冲突。

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

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

<program> <other-version> 需要 <package> (<version>)

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

Nic*_*ich 7

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

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

  1. composer update [<package>]

... 或者 ...

  1. 在作曲家的当前目录中composer install使用composer.json礼物而不是锁文件运行,它会自动生成锁文件


IMS*_*SoP 4

当您指定一个包名称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.