作曲家安装不兼容的包
Composer installing incompatible package
我有一个 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
以及如何防止这个错误(和那个包版本)发生?
我的解决方案是删除 --ignore-platform-reqs
。对于任何前瞻性软件包(例如任何 Ocramius 软件包),这要么会像这样严重失败,要么会出现几个 st运行ge 错误,但您似乎无法找到原因。
--ignore-platform-reqs
所做的是关闭 Composer 所做的检查,以确保只有与环境兼容的包才能工作。在这种情况下,有问题的软件包最近更新为使用 PHP 7.4,并且碰巧在 Composer 安装程序中使用了新的 属性 类型声明。
我一直在与其他几个奇怪的问题作斗争(比如 Doctrine 的实体管理器失败 运行domly,另一个与 Ocramius 相关的包),当我 运行 Composer 时,所有这些都通过删除标志而消失了。不管多年前我出于什么原因需要它,现在我不再需要了。
如果您觉得需要它,请查看 config.platform
,它似乎允许您对 Composer 撒谎,或者努力完全消除对该标志的需求(为什么您认为需要它,克服它如果可能的话)。
Lets you fake platform packages (PHP and extensions) so that you can emulate a production env
or define your target platform in the config. Example: {"php": "7.0.3", "ext-something": "4.0.3"}
.
我有一个 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
以及如何防止这个错误(和那个包版本)发生?
我的解决方案是删除 --ignore-platform-reqs
。对于任何前瞻性软件包(例如任何 Ocramius 软件包),这要么会像这样严重失败,要么会出现几个 st运行ge 错误,但您似乎无法找到原因。
--ignore-platform-reqs
所做的是关闭 Composer 所做的检查,以确保只有与环境兼容的包才能工作。在这种情况下,有问题的软件包最近更新为使用 PHP 7.4,并且碰巧在 Composer 安装程序中使用了新的 属性 类型声明。
我一直在与其他几个奇怪的问题作斗争(比如 Doctrine 的实体管理器失败 运行domly,另一个与 Ocramius 相关的包),当我 运行 Composer 时,所有这些都通过删除标志而消失了。不管多年前我出于什么原因需要它,现在我不再需要了。
如果您觉得需要它,请查看 config.platform
,它似乎允许您对 Composer 撒谎,或者努力完全消除对该标志的需求(为什么您认为需要它,克服它如果可能的话)。
Lets you fake platform packages (PHP and extensions) so that you can emulate a production
env
or define your target platform in the config. Example:{"php": "7.0.3", "ext-something": "4.0.3"}
.