Symfony安装可重用Bundle时Composer依赖冲突原因解析
依赖冲突原因分析
场景概述
正在开发一款Symfony独立可重用Bundle,尝试将其安装到目标Symfony应用时遭遇依赖冲突,相关配置与错误信息如下:
可重用Bundle的composer.json
{ ... "require": { "php": ">=8.1", "symfony/orm-pack": "2.2.0", "knplabs/doctrine-behaviors": "2.0.8" } }
目标Symfony应用的composer.json
{ "type": "project", "license": "proprietary", "minimum-stability": "stable", "prefer-stable": true, "require": { "php": ">=8.1", "ext-ctype": "*", "ext-iconv": "*", "symfony/console": "6.1.*", "symfony/dotenv": "6.1.*", "symfony/flex": "^2", "symfony/framework-bundle": "6.1.*", "symfony/runtime": "6.1.*", "symfony/yaml": "6.1.*" }, "require-dev": { }, "config": { "allow-plugins": { "composer/package-versions-deprecated": true, "symfony/flex": true, "symfony/runtime": true }, "optimize-autoloader": true, "preferred-install": { "*": "dist" }, "sort-packages": true }, "autoload": { "psr-4": { "App\": "src/" } }, "autoload-dev": { "psr-4": { "App\\Tests\": "tests/" } }, "replace": { "symfony/polyfill-ctype": "*", "symfony/polyfill-iconv": "*", "symfony/polyfill-php72": "*", "symfony/polyfill-php73": "*", "symfony/polyfill-php74": "*", "symfony/polyfill-php80": "*", "symfony/polyfill-php81": "*" }, "scripts": { "auto-scripts": { "cache:clear": "symfony-cmd", "assets:install %PUBLIC_DIR%": "symfony-cmd" }, "post-install-cmd": [ "@auto-scripts" ], "post-update-cmd": [ "@auto-scripts" ] }, "conflict": { "symfony/symfony": "*" }, "extra": { "symfony": { "allow-contrib": false, "require": "6.1.*" } } }
安装错误信息
Problem 1 - knplabs/doctrine-behaviors v2.0.8 requires symfony/cache ^4.4|^5.1 -> found symfony/cache[v4.4.0, ..., v4.4.48, v5.1.0, ..., v5.4.15] but the package is fixed to v6.1.7 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command. - oromedialab/corebundle 0.0.1 requires knplabs/doctrine-behaviors 2.0.8 -> satisfiable by knplabs/doctrine-behaviors[v2.0.8]. - Root composer.json requires oromedialab/corebundle ^0.0.1 -> satisfiable by oromedialab/corebundle[0.0.1]. Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions. You can also try re-running composer require with an explicit version constraint, e.g. "composer require oromedialab/corebundle:*" to figure out if any version is installable, or "composer require oromedialab/corebundle:^2.1" if you know which you need. Installation failed, reverting ./composer.json and ./composer.lock to their original content.
冲突核心原因
- 可重用Bundle依赖的
knplabs/doctrine-behaviors版本为2.0.8,该版本仅兼容symfony/cache的^4.4|^5.1范围,不支持Symfony 6.x系列。 - 目标Symfony应用为6.1.x版本,已锁定
symfony/cache为6.1.7,此版本不在knplabs/doctrine-behaviors 2.0.8的兼容范围内,Composer无法找到同时满足两者的版本。 - 目标应用的
extra.symfony.require明确指定必须使用6.1.*版本,限制了Symfony核心包无法降级到5.x,进一步导致冲突无法自动调和。
内容的提问来源于stack exchange,提问作者Ibrahim Azhar Armar
相关产品推荐
相关产品推荐

