Yarn: 无法在工作区中安装依赖项:预期工作区包存在

创建于 2020-01-08  ·  56评论  ·  资料来源: yarnpkg/yarn

您要请求功能还是报告错误
漏洞

目前的行为是什么?
yarn install失败:

error An unexpected error occurred: "expected workspace package to exist for \"@babel/template\"".

将 yarn 升级到1.19后开始出现错误,并且在最新的稳定版本1.21.1仍然存在

在 #7797 和 #7734 中可以观察到类似的错误

如果当前行为是错误,请提供重现步骤。
https://github.com/callstack/haul安装依赖时可以重现该错误

  1. git clone [email protected]:callstack/haul.git
  2. cd haul
  3. yarn install

什么是预期行为?

yarn install应该成功安装依赖项。

请提及您的 node.js、yarn 和操作系统版本。

  • 节点: 12.14.1 / 13 (两者都可重现)
  • 纱线: 1.21.1
  • 操作系统:macOS 10.15.2

最有用的评论

yarn policies set-version 1.18.0对我有用——yarn 会自动切换到这个版本的项目! 好整洁!
https://classic.yarnpkg.com/en/docs/cli/policies/

所有56条评论

尝试向工作区包添加依赖项时遇到相同的行为:

yarn workspace @scope/mypackage add npm-package

error An unexpected error occurred: "expected workspace package to exist for \"@babel/highlight\"".

类似详情

Yarn version: 
  1.21.1

Node version: 
  10.17.0

Platform: 
  darwin x64

OS
  macOS 10.15.2

遇到与node@10相同的问题:

An unexpected error occurred: "expected workspace package to exist for \"lru-cache\"".
Node: 10.15.3
yarn: 1.21.1
OS: macOS 10.15.1

我通过在我的 repo 中运行 yarn 的策略功能找到了一个(临时)解决方法

> yarn policies set-version 1.18.0

这基本上意味着:

在后台,该命令将简单地从 GitHub 存储库下载单文件版本,将其存储在您的项目中(在 .yarn/releases 文件夹中),然后最后更新您的配置以指向新文件(使用 yarn-path )。

在 Yarn 1.21.1 中也看到了这一点。 运行yarn upgrade-interactive ,我可以在我的存储库中重现错误,_but_ 在package.json手动碰撞版本仍然可以正常工作。

也遇到这种情况:

error An unexpected error occurred: "expected workspace package to exist for \"string-length\"".

当尝试在我的工作区包yarn add @reduxjs/toolkit添加一个无关的依赖项时。 手动将 dep 添加到 package.json 后跟yarn确实有效。

尝试yarn cache clean ,并删除了 yarn.lock 和 node_modules 文件夹,没有变化。

▶ yarn --version
1.21.1

同样的错误在这里:

$ yarn workspace @scope/web add ramda
error An unexpected error occurred: "expected workspace package to exist for \"chalk\"".
info If you think this is a bug, please open a bug report with the information provided in "/home/user/projects/web/apps/web/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.
error Command failed.
Exit code: 1

添加 yarn-error.log

Arguments: 
  /home/user/.nvm/versions/node/v10.13.0/bin/node /home/user/.nvm/versions/node/v10.13.0/lib/node_modules/yarn/lib/cli.js add ramda

PATH: 
  /home/user/.yarn/bin:/home/user/.config/yarn/global/node_modules/.bin:/home/user/.yarn/bin:/home/user/.config/yarn/global/node_modules/.bin:/home/user/.nvm/versions/node/v10.13.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/user/Android/Sdk/emulator:/home/user/Android/Sdk/tools:/home/user/Android/Sdk/tools/bin:/home/user/Android/Sdk/platform-tools:/home/user/Android/Sdk/emulator:/home/user/Android/Sdk/tools:/home/user/Android/Sdk/tools/bin:/home/user/Android/Sdk/platform-tools

Yarn version: 
  1.21.1

Node version: 
  10.13.0

Platform: 
  linux x64

Trace: 
  Invariant Violation: expected workspace package to exist for "chalk"
      at invariant (/home/user/.nvm/versions/node/v10.13.0/lib/node_modules/yarn/lib/cli.js:2314:15)
      at _loop2 (/home/user/.nvm/versions/node/v10.13.0/lib/node_modules/yarn/lib/cli.js:94898:9)
      at PackageHoister.init (/home/user/.nvm/versions/node/v10.13.0/lib/node_modules/yarn/lib/cli.js:94957:19)
      at PackageLinker.getFlatHoistedTree (/home/user/.nvm/versions/node/v10.13.0/lib/node_modules/yarn/lib/cli.js:48743:20)
      at PackageLinker.<anonymous> (/home/user/.nvm/versions/node/v10.13.0/lib/node_modules/yarn/lib/cli.js:48754:27)
      at Generator.next (<anonymous>)
      at step (/home/user/.nvm/versions/node/v10.13.0/lib/node_modules/yarn/lib/cli.js:310:30)
      at /home/user/.nvm/versions/node/v10.13.0/lib/node_modules/yarn/lib/cli.js:328:14
      at new Promise (<anonymous>)
      at new F (/home/user/.nvm/versions/node/v10.13.0/lib/node_modules/yarn/lib/cli.js:5301:28)

npm manifest: 
{
   ...
}

v1.19以来,我一直遇到同样的问题。
yarn upgrade-interactive变得无法使用; 它将无法应用版本更新。

更新到v1.21我再也无法使用yarn install了。 它总是抛出这个错误:

预期的工作区包存在于...

降级到1.18解决了这两个问题。

我应该指出,这些问题只发生在一个项目上,这是一个使用lernayarn workspaces的 monorepo。

与@raspo 相同的经历
在我的工作区启用的 monorepo 中,无法再从命令行安装软件包。

我不想降级纱线,因为它来自我的包管理器,所以我使用 npx 作为一个糟糕的解决方法。

npx [email protected] add your-deps-here

也得到这个 1.17 到 1.22。 它似乎是一些包 - 从istanbul-lib-instrument 。 然后jest-snapshot然后cssstyle反复。

Invariant Violation: expected workspace package to exist for "istanbul-lib-instrument"
    at invariant (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:2314:15)
    at _loop2 (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:94959:9)
    at PackageHoister.init (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:95018:19)
    at PackageLinker.getFlatHoistedTree (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:48743:20)
    at PackageLinker.<anonymous> (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:48754:27)
    at Generator.next (<anonymous>)
    at step (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:310:30)
    at /usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:328:14
    at new Promise (<anonymous>)
    at new F (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:5301:28)

lerna.json

{
  "packages": [
    "packages/*",
    "apps/*"
  ],
  "version": "1.0.17",
  "npmClient": "yarn",
  "useWorkspaces": true
}

package.json:

{
...
"workspaces": {
    "packages": [
      "apps/*",
      "packages/*"
    ],
    "nohoist": [
      "**/webpack-dev-server"
    ]
  },
...
}

我也得到这个回归任何消息?

同上,mac上monorepo和yarn交互升级

Invariant Violation: expected workspace package to exist for "stack-utils"
    at invariant (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:2314:15)
    at _loop2 (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:94959:9)
    at PackageHoister.init (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:95018:19)
    at PackageLinker.getFlatHoistedTree (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:48743:20)
    at PackageLinker.<anonymous> (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:48754:27)
    at Generator.next (<anonymous>)
    at step (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:310:30)
    at /usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:328:14
    at new Promise (<anonymous>)
    at new F (/usr/local/Cellar/yarn/1.22.0/libexec/lib/cli.js:5301:28)
$ yarn lerna --version
3.20.2
$ yarn version
1.22.0
$ node --version
v13.8.0

作为临时解决方案,使用yvm并使用版本1.18.0 。 对我有用

yarn policies set-version 1.18.0对我有用——yarn 会自动切换到这个版本的项目! 好整洁!
https://classic.yarnpkg.com/en/docs/cli/policies/

我刚刚在 monorepo Lerna + Yarn (v1.22) 上遇到了同样的问题。 解决了重新创建yarn.lock

这看起来像是#7734 的副本。

为@storybook/api 遇到这个问题。 @nerdyman的解决方法在此期间似乎对我

我不想降级纱线,因为它来自我的包管理器,所以我使用 npx 作为一个糟糕的解决方法。

npx [email protected] add your-deps-here

这对我有用

我遇到了同样的问题,虽然删除yarn.lock并运行yarn install (或yarn workspace some-workspace bla bla bla )工作,但问题是我使用的是较新版本的纱线与我的团队成员相比.

所以解决方案是使用yarn policies 。 您基本上运行yarn policies set-policy ,这将下载最新的稳定版纱线并将其保存在.yarn/并且还会更新您的.yarnrc以指向下载的纱线版本。 通过这种方式,您可以确保每个人都使用相同的纱线版本并避免此类问题。

更多信息在这里: https: //classic.yarnpkg.com/en/docs/cli/policies#toc -policies-set-version

所以这个问题的解决方案是降级yarn ,yarn 2.0 会很有趣

如果我在您的回复中错误地读到了讽刺, @remorses表示歉意。 我还没有看到有人在 1.x 中提交 PR 来解决这个问题。 有可能在其他问题中,人们提交了针对这个或其他已被拒绝的错误的修复程序,这会让我感到难过。 如果有大量 1.x 的 PR 被忽略,我希望维护者欢迎愿意帮助维护 1.x 的社区成员。 如果没有来自社区的 PR 和维护,就很难指责任何想要专注于他们活跃的开发分支的人。

如果您在工作区中使用相同 npm 包的不同版本,通常会发生这种情况。

假设您有@scope/www@scope/api工作区,并且都有eslint npm 包。 但是@scope/www正在使用[email protected]@scope/api正在使用[email protected] 。 此外,您在根packages.json[email protected] packages.json

然后,如果您尝试将软件包安装到其中一个工作区,您将收到error An unexpected error occurred: "expected workspace package to exist for \"eslint\"".错误。 因为您的eslint版本都不相同。

一旦你使它们相同,那么你就不应该得到任何错误。

这很有趣,感谢@abdullahceylan提供的额外细节 - 只是好奇:1.19.2(没有错误)之前的 Yarn 如何处理这种情况?

它也给了我同样的错误@friederbluemle

我遇到这个问题是因为我的工作区中有不同版本的@babel/core ,正如@abdullahceylan所说。 将@babel/core更新到相同版本为我解决了这个问题! 🙏

我希望有针对此错误的更具体的消息。

也有这个问题,但可以解决它:
原因是我的一个包和根工作区中有一个包 (eslint)。 将它从根工作区中删除,一切都恢复正常了。

发现我的问题来自 nextjs 中的@babel/core被固定在7.7.7而其他一些模块需要^7.10.0所以这就是为什么 yarn 在你的包中放置了一个额外的 node_module 文件夹解决依赖冲突。

我通过这样做解决了它使用resolutions

  "resolutions": {
    "**/@babel/core": "7.10.2"
  },

并做了一个yarn install / npx lerna bootstrap

在我正在处理的应用程序中,我能够通过更改来解决此错误

"workspaces": [
  "packages/**/*"
],

"workspaces": [
  "packages/@org1/*",
  "packages/@org2/*",
  "packages/*"
],

也许yarn意外检测到我的一个包的 node_modules 内的嵌套工作区? 我没有时间去研究它。 我使用的是纱线 1.22.4。

编辑:这似乎得到了以下声明的证实:整合依赖版本(这反过来将它们从packages目录中提升出来)也可以解决这个问题。

对我有用的是

yarn lerna add npmpackage --scope=@scope/my-package

你可以在这里使用npx而不是yarn

同样在这里yarn add在尝试做任何包时完全失败。 请修复🙏

突然遇到这绝对是出乎意料的。

编辑:如@abdullahceylan 所述,我有一个本地包,与 npm 依赖项同名。

我对yarn add有同样的问题。 就我而言,它抱怨eslint 。 我手动将eslint版本设置为7.2.0
我检查了我的yarn.lock来检查哪些依赖项要求不同版本的eslint (只是使用带有eslint关键字的“查找”工具)。
我意识到很多依赖项都需要6.8.0 ,他们正在尝试安装它。

我已经解决了将eslint版本设置为6.8.0
您可以选择将resolutions参数添加到package.json文件中。 在我的情况下,它会像

"resolutions": {
  "eslint": "6.8.0"
}

希望它可以帮助某人。

非常感谢@dxit ,这对我有帮助😄

有没有人能够查明究竟是什么原因造成的? v1 中是否会包含修复程序?

在使用提升的 monorepo 上遇到同样的事情。 使用 npx hack 解决它以安装 deps。

假设您正在使用 Lerna, @mmun您的修复可能与关于此处了解更多详情。

我在以下环境中遇到此错误:

Node: 10.20.1
Yarn: 1.22.4

它正在使用以下设置。

Node: 10.15.3
Yarn: 1.13.0

我试图将 Yarn 设置为1.18.0但它似乎不适用于 Node 10.20.1

自我注意:一旦yarn的下一个版本发布,请重新访问此内容。

@dkempner yarn 1 不会有新版本,我不认为......如果是的话,这个 repo 中非常安静(过去 2 个月只有 1 次提交)。 你可以试试yarn@berry tho

测试每个版本后,bug 开始于 1.19.2,至少对于 Windows。 所以 1.19.1 - 1.19.2 之间的一些变化中断了

@thefat32 - 是的,没错。 不仅仅是在 Windows 上。 我的历史记录中有这个命令,每当我看到错误时,我经常使用它作为解决方法:

npx [email protected] upgrade-interactive

在向纱线 monorepo 添加一些依赖项时,我遇到了同样的问题。

error An unexpected error occurred: "expected workspace package to exist for \"jest\"".

嗨,伙计们,我遇到了完全相同的问题!

An unexpected error occurred: "expected workspace package to exist for \"@jest-cli"".
我遇到这个问题是因为我的工作区中有不同版本的 jest-cli。 通过将所有软件包升级到最新版本来解决它。

@abdullahceylan您知道 _transitive_ 依赖项是否仍然如此吗? 我和其他人一样失败,但在我的情况下,依赖不是我的,所以我不知道如何升级它。 workspaces.nohoist什么改变吗?

@customcommander TBH 我还没有遇到过像你这样的情况,但在这种情况下我会尝试的第一件事是使用"**/pagkage-name"作为nohoist选项。

@customcommander TBH 我还没有遇到过像你这样的情况,但在这种情况下我会尝试的第一件事是使用"**/pagkage-name"作为nohoist选项。

为什么?

目前正在与 lerna 一起经历这个

我们已将范围缩小到在v1.19.2开始为我们发生

节点:v12.13.0
纱线:作品 <= v1.19.1
操作系统:macOS 10.15.6

https://github.com/yarnpkg/yarn/compare/v1.19.1...v1.19.2

yarn policies set-version 1.19.1与 lerna 一起为我们工作

将纱线策略更改为yarn policies set-version 1.18.0也对我有用。
我是在:
纱线: 1.22.5
节点:10.21
操作系统:Arch Linux (x64)

除了本线程中已经建议的解决方案之外,我没有其他解决方案,但似乎 PR https://github.com/yarnpkg/yarn/pull/7289是引入回归的地方,特别是这些行

我遇到的这个错误的版本特别令人困惑,因为错误消息中显示的依赖项仅安装在工作区根目录中,而不是安装在任何嵌套的工作区中。

我在这里创建了一个最小的复制: https : pretty-quick在树中只出现一次,我也得到了expected workspace package to exist for "pretty-quick" 。 当纱线尝试提升pretty-quick的传递依赖项时,实际错误似乎正在发生。

我尝试在 yarn 代码库中查看是否可以解决该问题,但是我的机器上有相当多的单元测试失败,自述文件中console.logdebugger语句起作用(我猜是因为yarn产生子进程并且它们不继承节点的--inspect标志)。 可悲的是,看起来 yarn 1 似乎不再由原作者维护,对于新的贡献者来说,它也不是一个简单的代码库。

就我而言,它可能是@babel/core的版本冲突。 我通过以下方式解决了:查看yarn why @babel/core安装的版本,将不同版本的包添加分辨率以统一版本。

添加这个以防其他人(上帝帮助他们)有一个类似的问题,因为我刚刚花了一半的周末时间调试/基本上重新格式化我的电脑......

我设置yarn policies set-version 1.19.1认为一切都很好。 几个小时后,我构建了我的 Next.js 应用程序并得到了这个Error occurred prerendering page... 。 我真的在阳光下尝试了一切,并且刚刚意识到做yarn policies set-version 1.19.1是原因。

更奇怪的是它破坏了我的本地项目。 如果我切换到稳定分支,删除所有节点模块,yarn.lock 等,切换回最新版本的纱线,然后运行yarn install ,然后再次构建我的 Next.js 应用程序,我得到相同的错误。

我不知道 tbh 发生了什么。 我真的重新安装了节点、纱线等。唯一的解决方案是删除应用程序并再次克隆它。

我对eslint包有同样的问题。 原来问题是我的工作区根目录有 eslint 作为开发依赖项,但我也有一个工作区包,它依赖于依赖于不同版本的 eslint 的 npm 包,我认为最终以某种方式破坏了提升过程。 我所做的就是确保所有软件包都依赖于相同版本的 eslint,并且错误消失了。

也遇到这个问题。 @export-mike 的解决方案可作为修补程序使用,谢谢

纱线开发团队是否有任何官方回应/修复路线图?

我的解决方案是切换到 pnpm。 强烈推荐它!

此页面是否有帮助?
0 / 5 - 0 等级