我正在研究一个使用composer
进行依赖项管理的项目:
{
"require": {
"doctrine/annotations": "1.8.0",
"doctrine/dbal": "2.9.3",
"doctrine/orm": "2.7.1",
"doctrine/reflection": "1.2.0",
"giggsey/libphonenumber-for-php": "8.11.5",
"guzzlehttp/guzzle": "6.5.2",
"james-heinrich/getid3": "v1.9.19",
"php-extended/php-http-message-factory-psr17": "2.0.0",
"phpoffice/phpspreadsheet": "1.10.1",
"psr/event-dispatcher": "1.0.0",
"sabre/vobject": "4.2.2",
"sabre/xml": "2.1.3",
"spiral/roadrunner": "1.7.0",
"symfony/browser-kit": "4.4.4",
"symfony/cache": "v4.4.4",
"symfony/class-loader": "v3.4.38",
"symfony/config": "4.4.4",
"symfony/console": "4.4.4",
"symfony/css-selector": "4.4.4",
"symfony/debug": "4.4.4",
"symfony/dependency-injection": "4.4.4",
"symfony/dom-crawler": "4.4.4",
"symfony/error-handler": "4.4.4",
"symfony/event-dispatcher": "v4.4.4",
"symfony/expression-language": "4.4.4",
"symfony/filesystem": "4.4.4",
"symfony/finder": "4.4.4",
"symfony/http-foundation": "4.4.4",
"symfony/http-kernel": "4.4.4",
"symfony/mailer": "4.4.4",
"symfony/mime": "4.4.4",
"symfony/polyfill-ctype": "1.14.0",
"symfony/polyfill-intl-idn": "1.14.0",
"symfony/polyfill-mbstring": "1.14.0",
"symfony/polyfill-php72": "1.14.0",
"symfony/polyfill-php73": "1.14.0",
"symfony/process": "4.4.4",
"symfony/service-contracts": "2.0.1",
"symfony/validator": "4.4.4",
"symfony/var-dumper": "4.4.4",
"symfony/var-exporter": "4.4.4",
"symfony/yaml": "4.4.4"
}
}
我正在尝试向项目添加新的依赖项,即symfony/contracts
。此程序包将替换其他几个Symfony
程序包,其中symfony/event-dispatcher-contracts
程序包是项目中的依赖项,这是间接需要的。
但是,在运行composer require symfony/contracts
命令时,我收到一条错误消息,我无法弄清楚:
# composer require symfony/contracts:2.0.1
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- don't install symfony/event-dispatcher-contracts v1.1.7|don't install symfony/contracts v2.0.1
- don't install symfony/contracts v2.0.1|remove symfony/event-dispatcher-contracts v1.1.7
- don't install symfony/contracts v2.0.1|don't install symfony/event-dispatcher-contracts v1.1.7
- Installation request for symfony/contracts 2.0.1 -> satisfiable by symfony/contracts[v2.0.1].
- Installation request for symfony/event-dispatcher-contracts (locked at v1.1.7) -> satisfiable by symfony/event-dispatcher-contracts[v1.1.7].
Installation failed, reverting ./composer.json to its original content.
我尝试删除composer.json
以外的所有内容并进行重新安装,但最终出现相同的错误。
另一个令人费解的问题是symfony/event-dispatcher-contracts
软件包没有明确锁定在composer.json
中某个版本,但是错误消息指定了v1.1.7
版本,而不是最新版本。目前是2.0.1
。查看composer.lock
文件,我发现有一个包含该包的单个require
指令,定义为symfony/event-dispatcher
需要"symfony/event-dispatcher-contracts": "^1.1"
。这确实迫使symfony/event-dispatcher-contracts
升级到1.1.7
版本,但是我无法解释为什么它强制安装软件包,而不是用symfony/contracts
替换它。
如何将symfony/contracts
添加到该项目并删除symfony/event-dispatcher-contracts
依赖项(包含在symfony/contracts
包中)。
答案 0 :(得分:0)
symfony/contracts
替换 symfony/event-dispatcher-contracts
和其他软件包。通过composer why symfony/event-dispatcher-contracts
检查其他哪个软件包需要此软件包-我认为您需要先更新任何其他软件包,然后才能开始使用统一合同软件包。
在当前设置中,symfony/event-dispatcher
需要v1.1中的特定合同。要安装的软件包将替换这些合同,但仅替换v2中的合同。如果您不想将symfony/contracts
升级到v5,则安装版本约束为^1.1
的{{1}}可能是最好的解决方案-这取决于合同的v2