条件作曲家要求取决于 php 版本

Max*_*Max 2 php composer-php

我希望我的composer.json告诉composer如果系统运行php7.x则安装一个版本的库,如果系统运行php8.x则安装另一个版本

原因是该库的 1.x 版本与 php7 兼容,而 2.x 版本仅与 php8 兼容。就像这样:

if:{php: ^7, require:{mylib:^1.0}}
else:{php: ^8, require{mylib:^2.0}}
Run Code Online (Sandbox Code Playgroud)

那太好了。
我们的一些客户由于各种原因无法如此快地将他们的服务器切换到 php8,但我们希望继续前进。

IMS*_*SoP 6

Composer版本约束语法支持多个约束连接||以表示“逻辑 OR”。这允许您编写诸如“1.x 高于 1.5,或 2.x 高于 2.1”之类的约束:

{
    "require": {
        "somevendor/somelib": "^1.5 || ^2.1"
    }
}
Run Code Online (Sandbox Code Playgroud)

当有人运行时composer update,Composer 将安装可用的最高版本,该版本既满足此约束,又满足库本身以及正在安装的任何其他内容指定的约束。

只要该库的 2.x 版本在其composer.json 中声明它们需要 PHP 8,它们就不会安装在 PHP 7 下,而是会选择 1.x 版本。

显然,您需要确保您的代码实际上与两个版本的库兼容,例如定期在两个版本上运行测试。