NestJS项目第三方依赖引发Error [ERR_REQUIRE_ESM]兼容问题求助
解决NestJS中wrap-ansi/wide-align的ESM兼容错误
问题根源
安装@nestjs-modules/mailer等包后,依赖链中的wrap-ansi和wide-align(CommonJS格式)尝试用require()加载最新版string-width,但最新版string-width是ESM-only模块,触发Error [ERR_REQUIRE_ESM]错误。添加"type": "module"会切换项目为ESM模式,但部分依赖仍为CommonJS,引发新的兼容问题。
解决方案
1. 锁定兼容版string-width
在package.json中添加版本锁定配置,强制使用同时支持CommonJS和ESM的string-width@^4.2.3:
- Yarn用户:添加
resolutions字段"resolutions": { "string-width": "^4.2.3" } - NPM用户:添加
overrides字段"overrides": { "string-width": "^4.2.3" }
2. 清理并重装依赖
执行以下命令彻底清理旧依赖并重新安装:
# 删除node_modules和锁定文件 rm -rf node_modules yarn.lock package-lock.json # 重新安装依赖 yarn install # 或 npm install
3. 移除"type": "module"
NestJS默认基于CommonJS运行,移除package.json中的"type": "module"字段,避免触发更多模块格式冲突。
验证
运行任意Nest命令(如nest start或nest build),确认错误不再出现。
内容的提问来源于stack exchange,提问作者Aldemar Cuartas Carvajal
相关产品推荐
相关产品推荐

