php - 有条件的 Composer 要求取决于 php 版本

标签 php composer-php

如果系统运行 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/

相关文章:

php - 如何一次插入多个技能?

laravel - 未找到流明命令

git - 通过 Composer 从 Bitbucket 中提取我自己的私有(private)存储库

installation - 使用composer在TYPO3 11中安装介绍包

repository - Composer 需要特定的存储库

PHP 在 MYSQL 中注册数百万条记录的最快方法

php - 如何从 PHP 显示 JavaScript 警报?

php - ReCaptcha 与 Laravel 5 表单类未找到错误

php - 在分隔符之前获取第一个字符串?

php - Composer没有看到GD扩展名