Composer:防止更新需要更高 PHP 版本的包
Posted
技术标签:
【中文标题】Composer:防止更新需要更高 PHP 版本的包【英文标题】:Composer: prevent updating packages that require higher PHP version 【发布时间】: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
,还应该直接要求common
和inflector
?如果dbal
已经需要它们,这是否有意义?
您可以要求 dbal,但只需将版本降至 2.5.13
我使用的dbal
版本是2.4.*
。所以,老了。但由于它在内部需要最新的包,所以不管它有多旧。
试试composer require doctrine/inflector:1.1.0
【参考方案1】:
使用 composer.json
文件中的 platform
选项来定义生产环境使用的 PHP 版本,如下所示:
"config":
"platform":
"php": "5.6.14"
见https://getcomposer.org/doc/06-config.md#platform
【讨论】:
"让您伪造平台包(PHP和扩展),以便您可以模拟生产环境或定义您的目标平台配置”。听起来像是不完全设计用于生产的东西。我想在我尝试之前我不会确定。 作为替代方案,仅在尽可能靠近生产系统的环境中运行composer require
、composer update
和 composer install
。
这个答案太棒了......谢谢以上是关于Composer:防止更新需要更高 PHP 版本的包的主要内容,如果未能解决你的问题,请参考以下文章
使用composer安装Elasticsearch-php教程