【问题标题】:Composer: prevent updating packages that require higher PHP versionComposer:防止更新需要更高 PHP 版本的包
【发布时间】:2018-01-26 02:53:25
【问题描述】:

我在我的 PHP 项目中使用 doctrine/dbal (v2.4.*) 包。我的生产服务器运行 PHP v5.6。

我今天早上运行了 composer update,它更新了我的 composer.lock 文件。现在,当我部署到生产环境时,我看到了:

 Problem 1
    - Installation request for doctrine/inflector v1.2.0 -> satisfiable by doctrine/inflector[v1.2.0].
    - doctrine/inflector v1.2.0 requires php ^7.0 -> your PHP version (5.6.14) does not satisfy that requirement.
  Problem 2
    - doctrine/inflector v1.2.0 requires php ^7.0 -> your PHP version (5.6.14) does not satisfy that requirement.
    - doctrine/common v2.4.3 requires doctrine/inflector 1.* -> satisfiable by doctrine/inflector[v1.2.0].
    - Installation request for doctrine/common v2.4.3 -> satisfiable by doctrine/common[v2.4.3].

具体如下:

doctrine/common v2.4.3 需要doctrine/inflector 1.* -> 可以满足doctrine/inflector[v1.2.0]。

doctrine/inflector v1.2.0 需要 php ^7.0 -> 你的 PHP 版本 (5.6.14) 不满足该要求

这意味着,即使dbal 是旧的,它也需要最新的common,而common 需要最新的inflector 包。问题是 inflector 开始依赖 PHP7 运行。

Composer 中是否有任何方法可以将包的更新限制为特定 PHP 版本支持的包?就像说:“请尽可能更新,但前提是服务器的 PHP 版本足够。”

【问题讨论】:

  • 你能用变形器 1.1 代替吗?或者去 common 2.7.3 或者你可以去 dbal 2.5.13
  • 你的意思是我不仅应该直接要求doctrine/dbal,还应该直接要求commoninflector?如果dbal 已经需要它们,这是否有意义?
  • 您可以要求 dbal,但只需将版本降至 2.5.13
  • 我使用的dbal 版本是2.4.*。所以,老了。但由于它在内部需要最新的包,所以不管它有多旧。
  • 试试composer require doctrine/inflector:1.1.0

标签: php laravel doctrine composer-php


【解决方案1】:

使用 composer.json 文件中的 platform 选项来定义生产环境使用的 PHP 版本,如下所示:

{
    "config": {
        "platform": {
            "php": "5.6.14"
        }
    }
}

https://getcomposer.org/doc/06-config.md#platform

【讨论】:

  • "让您伪造平台包(PHP和扩展),以便您可以模拟生产环境或定义您的目标平台配置”。听起来像是不完全设计用于生产的东西。我想在我尝试之前我不会确定。
  • 作为替代方案,仅在尽可能靠近生产系统的环境中运行 composer requirecomposer updatecomposer install
  • 这个答案太棒了......谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 2021-06-18
  • 2023-03-13
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多