如果系统运行 php7.x,我希望我的 composer.json 告诉 Composer 安装一个版本的库,如果系统运行 php8.x,则安装另一个版本
原因是该库的 1.x 版本与 php7 兼容,而 2.x 版本仅与 php8 兼容。 像这样:
if:{php: ^7, require:{mylib:^1.0}}
else:{php: ^8, require{mylib:^2.0}}
那就太好了。
由于各种原因,我们的一些客户不能如此快速地将他们的服务器切换到 php8,但我们想继续前进。
最佳答案
Composer version constraint syntax支持用 ||
连接的多个约束来表示“逻辑或”。这使您可以编写约束,例如“1.x 以上 1.5,或 2.x 以上 2.1”:
{
"require": {
"somevendor/somelib": "^1.5 || ^2.1"
}
}
当有人运行 composer update
时,Composer 将安装满足此约束和库本身以及正在安装的任何其他内容指定的约束的可用最高版本。
只要库的 2.x 版本在其 composer.json 中声明它们需要 PHP 8,它们就不会安装在 PHP 7 下,而是选择 1.x 版本。
显然,您需要确保您的代码实际上与库的两个版本兼容,例如通过在两个版本上定期运行测试。
关于php - 有条件的 Composer 要求取决于 php 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74446482/