【问题标题】:Composer installing incompatible packageComposer 安装不兼容的包
【发布时间】:2020-08-20 14:47:39
【问题描述】:

我有一个 composer.json 文件,其中包含以下内容:

"require": {
    "php": "~7.3.0",
    "ext-imagick": "*",
    "ext-apcu": "*",
    "ext-json": "*",
    "ext-blackfire": "*",
    "doctrine/doctrine-migrations-bundle": "^1.3",

--ignore-platform-reqs 后面的使用与 docker 镜像没有这些扩展有关,但 Heroku 环境有。

后者需要一个包,它需要另一个包。

$ composer why ocramius/package-versions
doctrine/orm            v2.7.2  requires  ocramius/package-versions (^1.2)
ocramius/proxy-manager  2.8.0   requires  ocramius/package-versions (^1.8.0)

$ composer why ocramius/proxy-manager
doctrine/migrations  v1.8.1  requires  ocramius/proxy-manager (^1.0|^2.0)

这是安装使用 PHP 7.4 的属性类型声明的代码。这在 PHP 7.3 中引发了一个严重的错误。

$ php -d memory_limit=-1 composer.phar update --ignore-platform-reqs
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 195 installs, 0 updates, 0 removals
  - Installing ocramius/package-versions (1.8.0): Loading from cache

Parse error: syntax error, unexpected 'string' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST) in 
             /var/www/project/vendor/ocramius/package-versions/src/PackageVersions/Installer.php
             on line 33

为什么我总是得到这个版本的 ocramius/package-versions 以及如何防止这个错误(和那个包版本)发生?

【问题讨论】:

  • 为什么不使用只需要兼容包的常用技术呢?多年来一直记录设置 PHP 平台
  • 感谢您的链接;它不太详细地说明了我在下面的回答所陈述的内容,但没有解释为什么它允许将 7.4 包放入供应商。您必须解释“只需要兼容包的常用技术”。

标签: php package composer-php php-7.3


【解决方案1】:

我的解决方案是删除--ignore-platform-reqs。对于任何具有前瞻性的包(例如任何 Ocramius 包),这要么会像这样严重失败,要么会出现一些你似乎无法追查原因的奇怪错误。

--ignore-platform-reqs 所做的是关闭 Composer 所做的检查,以确保只有与环境兼容的软件包才能工作。在这种情况下,有问题的包最近更新为使用 PHP 7.4,并且碰巧在 Composer 安装程序中使用了新的属性类型声明。

我一直在与其他几个奇怪的问题作斗争(比如 Doctrine 的实体管理器随机失败,另一个与 Ocramius 相关的包),当我运行 Composer 时,所有这些都通过删除标志而消失了。不管几年前我为什么需要它,现在我不再需要它了。

如果你觉得你需要它,请查看config.platform,它似乎可以让你对 Composer 撒谎,或者努力完全删除需要该标志(无论你为什么认为你需要它,如果可能的话,克服它)。

允许您伪造平台包(PHP 和扩展),以便您可以模拟生产 env 或在配置中定义您的目标平台。示例:{"php": "7.0.3", "ext-something": "4.0.3"}

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

【讨论】:

    猜你喜欢
    • 2017-10-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    相关资源
    最近更新 更多