"Root composer.json requires ocramius/package-versions..." 但我的 composer.json 中没有这样的要求

"Root composer.json requires ocramius/package-versions..." but there is no such requirement in my composer.json

在 Symfony 4 项目中,在作曲家自我更新到 2.1(从 1.x)后我遇到了问题。点击

时的错误信息之一
composer update nothing

是:

Root composer.json requires ocramius/package-versions == 1.3.0.0 -> satisfiable by ocramius/package-versions[1.3.0].

在我看来,真正奇怪的是我的 composer.json 不包含对“ocramius/package-versions”的任何引用,不知何故我无法追踪它的来源。甚至陌生人:当我尝试

composer show ocramius/package-versions --tree

我明白了

[InvalidArgumentException]
Package ocramius/package-versions not found

我的项目中对“ocramius/package-versions”的唯一引用来自

  1. composer.lock
  2. vendor/composer/package-versions-deprecated/composer.json
  3. vendor/composer/installed.json

它似乎卡在 composer.lock 中,但我不想 运行 对整个项目进行真正的作曲家更新,因为有副作用。有什么想法吗?

编辑: 在进入 composer why 的方向后,我设法找出了为什么 ocramius/package-versions 被包含在内,但仍然是 1.3.0:

 $ composer why ocramius/package-versions
composer/package-versions-deprecated  1.11.99.2  replaces  ocramius/package-versions (1.11.99)       
ocramius/package-versions             2.3.0      replaces  composer/package-versions-deprecated (*)

$ composer why composer/package-versions-deprecated
composer/package-versions-deprecated  1.11.99.2  replaces  ocramius/package-versions (1.11.99)          
doctrine/migrations                   3.2.0      requires  composer/package-versions-deprecated (^1.8)  
doctrine/orm                          2.7.5      requires  composer/package-versions-deprecated (^1.8)  
symfony/proxy-manager-bridge          v4.4.25    requires  composer/package-versions-deprecated (^1.8)

好的,所以我终于找到了为什么包含这些包。但是为什么版本不对? 然后天平从我的眼睛里掉了下来:为什么不直接更新它而不是试图找出为什么选择这个版本......??? 一个简单的

composer update ocramius/package-versions

成功了。哦!

正如您在 packagist page of that package 上看到的那样,v1.3.0 与 Composer v2 不兼容,因为它需要 composer-plugin-api: ^1.0.0。如果你想使用 Composer v2,你需要更新那个包。

如果你想检查哪个包需要这个,你可以使用composer why