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

NodeJS应用使用node命令运行正常但PM2启动报ERR_REQUIRE_ESM错误如何解决

报错根因

该ERR_REQUIRE_ESM错误核心是你的Node应用使用ES Module规范开发,直接执行node server.js时Node可自动识别适配规范,但PM2默认以CommonJS模式加载入口文件,导致加载失败。确认package.json存在的前提下,还有以下几种可能诱因:

  • PM2版本过低:低版本PM2对ES Module的支持不完善,无法自动识别.mjs后缀,也无法读取package.json中"type": "module"的配置项
  • package.json配置有误:package.json中未添加根层级的"type": "module"字段,或字段拼写错误、嵌套在其他字段下,PM2无法识别当前项目为ESM项目
  • PM2绑定的Node版本和直接运行的Node版本不一致:PM2调用的Node版本较低,不支持ES Module相关特性,无法正确加载ESM规范的文件
  • PM2默认启动模式适配问题:fork模式下PM2的内置加载逻辑未适配ESM规范,无法正确调用ES Module入口文件

对应解决方案

  1. 升级PM2到最新版本,完成后更新PM2的守护进程:
npm install pm2@latest -g
pm2 update
  1. 检查package.json配置,确保根层级存在"type": "module"字段:
{
  "name": "your-project",
  "type": "module",
  "dependencies": {}
}
  1. 启动时添加参数强制适配ESM模式:
pm2 start server.js --interpreter node --interpreter-args="--experimental-specifier-resolution=node"

如果你的入口文件后缀为.mjs,也可直接指定入口文件启动:

pm2 start server.mjs
  1. 固定配置可使用PM2生态配置文件,新建ecosystem.config.cjs文件(注意后缀为cjs,避免被识别为ESM文件报错):
module.exports = {
  apps : [{
    name: "your-app",
    script: "server.js",
    interpreter: "node",
    interpreter_args: "--experimental-specifier-resolution=node"
  }]
}

配置完成后用配置文件启动即可:

pm2 start ecosystem.config.cjs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:06:11