作曲家软件包问题

时间:2020-04-27 06:06:05

标签: composer-php

我正在研究一个使用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包中)。

1 个答案:

答案 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