尝试执行composer update <package>
,但出现以下错误:
请求的软件包
(锁定在 ,需要 [ ]可以满足dev- ),但这些冲突 符合您的要求或最低稳定性。
与此同时,标记<tag>
仅作为字符串存在于我的composer.lock文件中,我认为其中仅由composer update
对其进行了修改,但未被读取。
在这种情况下,“锁定”是什么意思,我该如何解决这个问题?
composer why-not <package>
说:
<程序> 3.0.8.1要求<程序包>(dev- <分支>)
这对我不是很有帮助
答案 0 :(得分:3)
当您为 composer update
指定包名称(例如 composer update somevendor/somepackage
)时,您是在告诉 Composer 您要更新该包并将其他所有内容保留在当前版本 - 您想“锁定”所有其他软件包所在的位置,然后只更新一个。
只有当您指定的软件包的新版本与那些已安装的软件包兼容时,这才有效。如果新版本需要其他东西的较新版本,或者列出它与特定版本“冲突”,Composer 只会告诉您它不能这样做。
其他软件包“锁定”的版本存储在 composer.lock
文件中,但您永远不应手动编辑该文件。
您有几种方法可以告诉 Composer 允许更新哪些包:
composer update somevendor/somepackage somethingelse/somedependency
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
):
composer update [<package>]
...或...
composer install
存在的情况下运行composer.json
,但在作曲家的当前目录中没有锁定文件,该文件会自动生成锁定文件