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

如何为pm2传递NODE_ENV=production环境变量?

解决PM2启动Node.js应用时无法加载Production环境配置的问题

我来帮你梳理下问题所在,以及对应的解决方案:

问题核心

你之前的几种尝试都没成功,主要是因为PM2传递环境变量的方式和你预期的不一样,尤其是通过pm2 start npm -- ...这种方式启动时,参数的传递逻辑需要特别注意。


解决方案1:命令行直接指定环境变量(快速解决)

当用PM2启动npm脚本时,要把环境变量放在PM2命令的最前面,而不是start之后。这样环境变量会被PM2进程继承,进而传递给你的Node.js应用:

NODE_ENV=production pm2 start npm -- start

之前你把NODE_ENV=production放在start后面,它会被当成npm start的命令行参数,而不是环境变量,所以应用根本读不到这个值。


解决方案2:使用PM2配置文件(推荐,适合多实例/复杂配置)

你的process.yml配置本身没问题,但启动方式错了——你不该把配置文件当成npm start的参数,而是直接让PM2加载这个配置文件:

首先修正你的process.yml(可以加上应用名称方便管理):

apps:
  - name: freefeed-server
    script: npm
    args: "start"  # 告诉PM2执行npm start命令
    watch: true
    instances: 4
    env:
      NODE_ENV: production

然后用以下命令启动:

pm2 start process.yml

这样PM2会读取配置里的环境变量,启动时自动传递给你的应用,就能加载Production配置了。


解决方案3:修改package.json脚本(不推荐,不够灵活)

如果你不想调整PM2的命令或配置,可以直接在package.json的start脚本里固定环境变量:

"scripts": {
  "start": "NODE_ENV=production node index.js"
}

之后用pm2 start npm -- start启动即可。不过这种方式会把环境变量固定死,无法快速切换到Development环境,所以只适合单一环境的场景。


为什么之前的尝试失败?

  1. pm2 start npm -- start NODE_ENV=production:这里的NODE_ENV=production是传给npm start的参数,不是环境变量,应用的process.env.NODE_ENV不会被设置。
  2. pm2 start npm -- start process.yml:你把配置文件当成了npm start的参数,PM2根本没读取这个文件,所以里面的环境变量设置完全没生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:42:20