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

PM2配置React静态服务时production环境未定义及端口配置问题求助

解决方案

问题根源

  1. 环境变量报错:在env中设置NODE_ENV: "production"时,PM2会自动尝试匹配配置文件中的env_production块,但你的配置里仅存在通用env块,因此抛出找不到对应环境的错误。另外,React的.env.production仅在构建阶段生效,静态文件托管阶段无需读取该文件。
  2. 端口配置限制:你当前用script: "serve"调用的是第三方serve包(而非PM2内置静态服务),只有该包会识别PM2_SERVE_PORT变量,因此换其他方式端口配置不生效。

方案一:使用PM2内置静态服务(推荐,无需额外依赖)

PM2自带静态文件托管功能,无需安装第三方serve包,直接通过配置指定静态目录和端口:

module.exports = {
  apps: [
    {
      name: "my-app",
      // 调用PM2内置serve命令,格式为 "pm2 serve <静态目录> <端口>"
      script: "pm2 serve build 3000",
      instances: 1,
      watch: false,
      exec_mode: "fork", // 静态服务用fork模式即可,cluster模式无意义
      restart_delay: 5000,
      listen_timeout: 50000,
      kill_timeout: 5000,
      log_date_format: "YYYY-MM-DD HH:mm Z",
      // 如需保留NODE_ENV,添加对应的env_production块避免报错
      env: {
        NODE_ENV: "production"
      },
      env_production: {
        NODE_ENV: "production"
      }
    }
  ]
};

注意事项

  • 若无需NODE_ENV,可直接删除env和env_production中的相关配置,彻底规避报错。

方案二:继续使用第三方serve包

若坚持使用serve包,需修正环境变量配置,并通过参数直接传递端口:

  1. 确保已安装serve包:npm install -g serve(或本地安装后用npx serve)
  2. 修改配置文件:
module.exports = {
  apps: [
    {
      name: "my-app",
      script: "serve",
      instances: 1,
      watch: false,
      exec_mode: "fork",
      restart_delay: 5000,
      listen_timeout: 50000,
      kill_timeout: 5000,
      log_date_format: "YYYY-MM-DD HH:mm Z",
      // 直接传递serve的参数,指定静态目录和端口
      args: "-s build -l 3000",
      // 配置对应环境块,解决PM2环境报错
      env: {
        NODE_ENV: "development"
      },
      env_production: {
        NODE_ENV: "production"
      }
    }
  ]
};

启动命令

启动时指定环境,PM2会自动匹配对应配置块:

pm2 start ecosystem.config.js --env production

验证方法

启动后用以下命令检查应用状态和端口:

pm2 list
pm2 show my-app

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:03:32