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

使用ecosystem.config.js启动应用时pm2报错,请求排查原因

问题原因与解决方案

错误根源

你遇到的语法错误,是因为错误地让bash去执行npm二进制文件导致的:
npm本身是基于Node.js开发的CLI工具,它的启动脚本使用Node语法(比如require),而你在配置里指定了exec_interpreter: "bash",相当于强制让bash去解析npm的脚本——bash根本不认识Node的语法,自然会抛出syntax error。

另外你的配置存在冗余冲突:既指定了script: "npm"和args: "start",又用exec_args写了完整的构建启动命令,这会导致pm2执行逻辑混乱。


修正后的配置方案

直接去掉多余的exec_interpreter和exec_args,用command字段整合完整的构建+启动流程即可,同时确保pm2能正确识别nvm管理的Node版本:

方案1:简洁版配置

module.exports = {
  apps: [
    {
      name: "strapi_portfolio",
      cwd: "./server",
      // 直接写完整命令,pm2会自动用shell执行
      command: "npm run build && npm start",
      exec_mode: "fork",
      autorestart: true,
    },
    {
      name: "nextjs_portfolio",
      cwd: "./client",
      command: "npm run build && npm start",
      exec_mode: "fork",
      autorestart: true,
      wait_ready: true,
      listen_timeout: 60000,
    },
  ],
};

方案2:适配nvm环境的配置(如果pm2找不到nvm管理的Node版本)

如果执行时出现npm: command not found,可以在命令前先加载nvm环境:

module.exports = {
  apps: [
    {
      name: "strapi_portfolio",
      cwd: "./server",
      command: "source ~/.nvm/nvm.sh && nvm use 18.15.0 && npm run build && npm start",
      exec_mode: "fork",
      autorestart: true,
    },
    {
      name: "nextjs_portfolio",
      cwd: "./client",
      command: "source ~/.nvm/nvm.sh && nvm use 18.15.0 && npm run build && npm start",
      exec_mode: "fork",
      autorestart: true,
      wait_ready: true,
      listen_timeout: 60000,
    },
  ],
};

额外说明

  • 如果你想保留script和args的写法,也可以删除exec_interpreter和exec_args,仅保留script: "npm"和args: "run build && npm start",效果和用command字段一致。
  • 建议提前在服务器执行nvm alias default 18.15.0,将该版本设为默认Node版本,这样pm2启动时无需手动指定版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:22:03