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

如何向PM2传递自定义参数 解决dotenv环境配置文件不加载问题

问题原因

  • 相对路径基准不匹配:PM2默认以执行pm2启动命令的目录作为相对路径的计算基准,你配置中dotenv_config_path=../../dev.env的相对路径是相对于脚本./packages/api/index.js所在目录编写的,和PM2默认的路径基准不一致,导致找不到dev.env文件。

可行解决方案

方案1:显式指定PM2工作目录(推荐,适配原有相对路径写法)

在PM2配置中新增cwd字段,指定工作目录为脚本所在的./packages/api,即可让原有相对路径正常生效,修改后配置如下:

{
  name: "api",
  script: "./index.js",
  cwd: "./packages/api", // 新增:指定工作目录为index.js所在目录
  watch: true,
  node_args: "-r dotenv/config",
  args: ["dotenv_config_path=../../dev.env"],
  env: {
    NODE_ENV: "development",
  },
}

方案2:使用绝对路径避免歧义

如果你使用的是JS格式的PM2配置文件(ecosystem.config.js),可以通过Node.js的path模块拼接绝对路径,完全规避相对路径的基准问题,示例如下:

const path = require('path')
module.exports = {
  apps: [{
    name: "api",
    script: "./packages/api/index.js",
    watch: true,
    node_args: "-r dotenv/config",
    // 假设dev.env放在项目根目录,ecosystem.config.js也存放在根目录
    args: [`dotenv_config_path=${path.resolve(__dirname, './dev.env')}`],
    env: {
      NODE_ENV: "development",
    },
  }]
}

方案3:通过环境变量直接指定配置路径

dotenv预加载模块支持直接读取DOTENV_CONFIG_PATH环境变量,你可以直接在PM2的env配置项中添加该变量,无需通过args传递,写法更简洁:

{
  name: "api",
  script: "./packages/api/index.js",
  cwd: "./packages/api", // 仍建议搭配cwd使用保证路径正确
  watch: true,
  node_args: "-r dotenv/config",
  env: {
    NODE_ENV: "development",
    DOTENV_CONFIG_PATH: "../../dev.env"
  },
}

生效验证

修改配置后执行以下命令重启进程即可验证:

  1. 停止删除旧进程:pm2 delete api
  2. 加载新配置启动:pm2 start <你的PM2配置文件名>
  3. 查看运行日志确认变量加载:pm2 logs api

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 09:06:02