为什么当我尝试升级某些依赖项时,Yarn 会抛出"Invariant Violation: expected workspace package to exist"?



我有一个由lerna管理的monoreo,它依赖于Yarn工作区功能。它看起来像这样:

/repo
|-- packages
|   |-- pkg-a
|   |   |-- package.json
|   |-- pkg-b
|   |   |-- package.json
|   |-- pkg-c
|   |   |-- package.json
|-- package.json

我使用yarn upgrade-interactive来更新我的包中的依赖项,但我得到了这个错误:

Invariant Violation: expected workspace package to exist for "@babel/plugin-transform-classes"

然而,这并不是我的直接依赖。当我在所有的package.json文件中搜索它时,我一无所获:

$ find . -name "package.json" -and -not -path "*/node_modules/*" | xargs grep "@babel/plugin-transform-classes"
$

它存在于我的yarn.lock文件中:

$ grep "@babel/plugin-transform-classes" yarn.lock
"@babel/plugin-transform-classes@^7.10.4":
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7"
"@babel/plugin-transform-classes@^7.4.0":
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.0.tgz#e3428d3c8a3d01f33b10c529b998ba1707043d4d"
"@babel/plugin-transform-classes" "^7.4.0"
"@babel/plugin-transform-classes" "^7.10.4"
$

我怀疑存在某种缓存问题,所以我尝试在Docker容器中从头开始:

  1. 删除所有node_modules文件夹
  2. 将repo装载到Docker容器中
  3. 运行yarn安装所有依赖项
  4. 运行yarn upgrade-interactive

但我得到了完全相同的错误。

我四处寻找答案,但没有人能解决我的问题。最让我印象深刻的是,似乎没有人知道为什么会发生。

有人能解释为什么会发生这种情况,以及如何重现这个问题吗?一旦我们知道原因,我们就有更好的机会找到合适的解决方案。

技术细节:

  • 节点12.18
  • 纱线1.22
  • 勒纳3.20

这似乎是一个错误

https://github.com/yarnpkg/yarn/issues/7734#issuecomment-580012389

官方建议降级到Yarn 1.19.x或手动升级包(不推荐使用Yarn 1(。

https://github.com/yarnpkg/yarn/issues/7734#issuecomment-671729912

此外,您可以尝试使用https://www.npmjs.com/package/npm-check-updatesCLI实用程序

从您想要升级的package.json文件的解析部分中删除包后尝试。

相关内容

最新更新