升级Yarn Berry后执行yarn命令出现YN0007构建报错求助
Yarn Berry(nodeLinker: node-modules)执行时要求构建多个npm包的问题
问题描述
我把项目升级到了Yarn Berry,并且配置了nodeLinker: node-modules来继续使用node_modules,但执行yarn命令时出现了以下构建提示:
➤ YN0000: ┌ Link step ➤ YN0007: │ core-js@npm:2.6.12 must be built because it never has been before or the last one failed ➤ YN0007: │ @getgauge/cli@npm:1.4.3 must be built because it never has been before or the last one failed ➤ YN0007: │ protobufjs@npm:6.11.3 must be built because it never has been before or the last one failed ➤ YN0007: │ core-js@npm:3.18.3 must be built because it never has been before or the last one failed ➤ YN0007: │ husky@npm:3.1.0 must be built because it never has been before or the last one failed ➤ YN0007: │ node-sass@npm:7.0.1 must be built because it never has been before or the last one failed ➤ YN0007: │ taiko@npm:1.2.7 must be built because it never has been before or the last one failed ➤ YN0007: │ taiko@npm:1.3.1 must be built because it never has been before or the last one failed ➤ YN0007: │ core-js-pure@npm:3.18.3 must be built because it never has been before or the last one failed
之前用旧版Yarn的时候从来不需要在node_modules里构建这些包,想知道为什么Yarn Berry会要求这么做,以及怎么解决这个问题。
原因分析与解决方法
为什么会出现这个提示?
- Yarn Berry的
node-modules链接器逻辑更严格:旧版Yarn可能会跳过部分包的prepare/install脚本,但Yarn Berry严格遵循npm规范,只要包定义了这些脚本就会触发执行。你列出的这些包(比如node-sass、protobufjs)本身就依赖本地构建来生成必要文件,旧版Yarn没执行可能是逻辑疏漏。 - 迁移后的缓存不兼容:Yarn Berry有独立的缓存系统,旧版Yarn的构建记录不会被继承,所以会判定这些包从未完成过构建,触发重新执行。
解决办法
1. 允许Yarn完成构建(推荐)
这些构建脚本是包正常运行的必要步骤,直接让Yarn执行即可,后续构建结果会被缓存,不会每次都重复执行。如果某个包构建失败,针对性排查:
- 比如
node-sass@7.0.1,检查Node.js版本是否在兼容范围(14.x-16.x),或者设置国内镜像源加速二进制包下载。 - 比如
husky@3.1.0,建议升级到v4+版本,旧版husky在Yarn Berry环境下存在兼容性问题。
2. 跳过指定包的构建脚本(谨慎使用)
如果确定某些包的构建脚本无实际作用,可以在.yarnrc.yml中配置packageExtensions禁用脚本:
packageExtensions: "core-js@npm:2.6.12": scripts: prepare: "" "node-sass@npm:7.0.1": scripts: install: ""
注意:这种操作可能导致包功能异常,仅在你明确知晓脚本作用时使用。
3. 清理缓存重新尝试
如果是缓存损坏导致的重复提示,清理Yarn Berry缓存后重新安装:
yarn cache clean yarn install
内容的提问来源于stack exchange,提问作者akhil
相关产品推荐
相关产品推荐

