当我尝试升级某些依赖项时,为什么 Yarn 会抛出“不变违规:预期工作区包存在”?

问题描述 投票:0回答:3

我有一个由 管理的 monorepo,它依赖于 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. 将存储库安装到 Docker 容器中
  3. 运行
    yarn
    安装所有依赖项
  4. 奔跑
    yarn upgrade-interactive

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

我四处寻找答案,但没有一个能解决我的问题。最让我震惊的是,似乎没有人知道为什么会发生这种情况。

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

技术细节:

  • 节点12.18
  • 纱线1.22
  • 勒纳3.20
yarnpkg lerna yarn-workspaces
3个回答
5
投票

好像是个bug

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-updates CLI 实用程序


1
投票

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


0
投票

您可以手动调整package.json并运行yarn install。 - 达尔德鲁普莫里斯

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

这对我有用。只需手动将包添加到package.json,删除node_modules并运行

yarn install

在这里交叉发帖可以节省人们解析纱线问题的时间,谢谢 DalderupMaurice!

© www.soinside.com 2019 - 2024. All rights reserved.