在将PHP从7.4更新到8.0之后,我在我现有的项目上运行了作曲家更新
,并得到了这样的错误:
这意味着什么?我该如何修复它?
(这是一个参考答案,旨在涵盖一个经常遇到的问题。该场景只是一个例子。另请参阅:如何解释作曲家的错误日志?(
除了所需的其他软件包的版本外,Composer软件包还可以指定它们支持的PHP版本。
在解析要安装的软件包版本时,Composer必须找到与所有约束匹配的版本:
composer.json
如果没有满足所有这些约束的包,您将得到一个错误。
请注意,PHP版本的版本约束遵循与其他作曲家约束相同的规则。所以^7.0
的约束意味着7.0以上的7. x的任何版本,并且不包括8.0。
要解决此问题,您需要放松其中一个约束:
acme/some package
,在示例中),并在Packagist(或您配置的任何自定义包源)上找到它李> 编写器。json和您所依赖的其他软件包并不排除该新版本。例如,如果您当前依赖于acme/somepackage
version^1.0
,但只有版本2.2才支持PHP8.0。0以后,您需要将约束更改为^2.2
,并确保应用程序仍然兼容李>
有时,您很确定应用程序在使用与以前使用的相同版本的软件包时会运行良好。在这种情况下,您可以在编写器中使用
来假装您仍在使用旧版本。这只能作为临时解决办法或用于测试,因为这意味着将安装在新PHP版本上可能完全损坏的包。平台
配置变量。json
例如:
{
"config": {
"platform": {
"php": "7.4.999"
}
}
}
另请参见“在composer中重写PHP基依赖项”
作为一个额外的提示:如果您想检查您可以做些什么来使您的项目兼容而不运行作曲家更新
,作曲家提供了命令为什么不
。您不仅可以使用包及其版本运行它:作曲家为什么不供应商/包2.0
将列出阻止安装供应商/包
的v2.0的所有其他包版本。
这也适用于PHP本身:composer why not PHP8.0
将告诉您哪些包阻止使用更高版本的PHP
Composer 2.0现在可用!
作为补充说明,require/remove和partial更新现在要快得多,因为Composer只加载正在更改的包的元数据。
我注意到一个没有提供链接的回复。
希望这是有帮助的