You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2部署NuxtJS 2报Error [ERR_REQUIRE_ESM]错误排查

问题根因

这个ERR_REQUIRE_ESM报错属于CommonJS与ES Module的规范兼容问题,和Nuxt业务代码、EC2 AMI2系统本身无关:

  • string-width、wrap-ansi这类终端字符串处理工具从5.x版本开始不再提供CommonJS导出,仅支持纯ESM规范
  • NuxtJS 2、5.0版本以下的PM2全链路基于CommonJS规范开发,Node.js 16.x默认禁止CommonJS模块通过require()加载纯ESM包,直接触发报错
  • 报错提示里建议手动修改node_modules下文件的方案属于一次性临时方案,只要重新执行依赖安装、CI/CD重新构建就会失效,不建议使用。
解决方案(按推荐优先级排序)

方案1:通过npm overrides强制锁定兼容版本(最稳定,无侵入)

你当前用的npm 8.11.0原生支持overrides配置,可以直接强制所有层级的依赖安装兼容CommonJS的版本,不需要改动业务代码、不需要更换运行时版本。

  1. 打开项目根目录的package.json,添加如下配置:
{
  "overrides": {
    "string-width": "4.2.3",
    "wrap-ansi": "7.0.0",
    "strip-ansi": "6.0.1",
    "ansi-styles": "4.3.0",
    "chalk": "4.1.2"
  }
}
  1. 删除项目下的node_modules目录和package-lock.json锁文件
  2. 重新执行npm install安装全量依赖
  3. 依次执行npm run build、npm run start即可正常启动,报错会完全消失。

方案2:升级本地PM2到兼容版本

你当前start脚本调用的是项目内安装的PM2,老版本PM2对依赖的版本范围约束太松,会自动拉取不兼容的ESM高版本依赖。直接将项目内PM2升级到最新稳定版即可解决:

npm install pm2@latest -D

升级完成后重新构建启动即可,不需要修改其他配置。注意不要依赖全局安装的PM2,保持和你现有脚本的调用路径一致,用项目内的PM2版本避免环境差异。

方案3:临时降级Node.js版本(仅应急使用)

如果需要紧急上线来不及调整依赖,可以将EC2实例上的Node.js版本降级到14.x,Node14对CommonJS加载ESM的检测逻辑更宽松,不会直接抛出阻断错误。但Node14已经结束官方维护,存在安全风险,仅适合临时救急,长期部署必须切换到前两个方案。

注意:任何情况下都不要直接修改node_modules目录下的源码做适配,只要部署流程触发依赖重装,所有手动修改的内容都会被覆盖,稳定性完全无法保障。

内容的提问来源于stack exchange,提问作者ks221197

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:09:37