Node 20.9.0搭配Yarn 3.2.4用protobufjs报错,求解决方案
问题分析与解决方案
这是Node 20.x + Yarn 3.x早期版本组合下的已知兼容性问题,根源在于:
- Node 18及以上版本的ES模块(ESM)规范要求导入JSON文件时必须添加
assert { type: "json" }断言 - protobufjs@7.2.5的postinstall脚本中存在未添加该断言的JSON导入逻辑
- Yarn 3.2.4的PnP加载器在处理这类ESM导入时会触发该错误
解决方案
方案1:升级Yarn版本(推荐)
Yarn 3.6及以上版本已修复了PnP与ESM JSON导入的兼容问题,执行以下步骤:
# 升级Yarn到3.6.4(稳定版) yarn set version 3.6.4 # 重新安装protobufjs yarn add protobufjs
方案2:跳过postinstall脚本(临时应急)
如果暂时无法升级Yarn,可以安装时跳过包的postinstall脚本:
yarn add protobufjs --ignore-scripts
注意:此方法会跳过protobufjs的初始化构建步骤,若后续需要使用其代码生成工具(如
pbjs),可能需要手动执行相关命令。
方案3:切换到CommonJS模块模式
在项目根目录的package.json中添加以下配置,强制使用CommonJS模块系统,避免ESM的JSON导入断言限制:
{ "type": "commonjs" }
注意:此方案会改变整个项目的模块解析规则,若项目依赖ESM模块可能引发其他问题,需谨慎使用。
内容的提问来源于stack exchange,提问作者Eric G
相关产品推荐
相关产品推荐

