您要请求功能还是报告错误?
漏洞
目前的行为是什么?
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安装依赖时可以重现该错误
git clone [email protected]:callstack/haul.git
cd haul
yarn install
什么是预期行为?
yarn install
应该成功安装依赖项。
请提及您的 node.js、yarn 和操作系统版本。
12.14.1
/ 13
(两者都可重现)1.21.1
尝试向工作区包添加依赖项时遇到相同的行为:
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
解决了这两个问题。
我应该指出,这些问题只发生在一个项目上,这是一个使用lerna
和yarn 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
选项。
发表在 Stack Overflow 上; 以防万一
当我尝试升级某些依赖项时,为什么 Yarn 会抛出“Invariant Violation: expected workspace package to exist”?
@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.log
或debugger
语句起作用(我猜是因为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。 强烈推荐它!
最有用的评论
yarn policies set-version 1.18.0
对我有用——yarn 会自动切换到这个版本的项目! 好整洁!https://classic.yarnpkg.com/en/docs/cli/policies/