启动 PM2 时从 dotenv 文件加载一个变量

Load a variable from dotenv file when starting PM2

我正在使用 PM2 作为 package.json 脚本启动我的应用实例:

"start:pm2": "pm2 start -i max node myapp.js"

我发现并不是所有的团队成员在开发的时候都希望使用max作为实例数的值,而是更喜欢使用一些较低的值。

为了不更改 package.json 我最好让他们更改 .env 文件中的值,因为我们已经在使用它,这样它的值将用作 pm2 的参数。

我知道我可以创建一个包装器 js 或 bash 脚本来从 .env 文件加载变量并将其传递给 pm2,但最好有一个没有它的解决方案。

我怎样才能做到这一点?

可以创建一个ecosystem.config.js file and declare your environment variables under the “env:” attribute, in your case the NODE_APP_INSTANCE可以用来设置实例数:

module.exports = {
  apps : [{
    name: "MyApp",
    script: "./myapp.js",
    env: {
      NODE_ENV: "development",
      NODE_APP_INSTANCE: "max"
    },
    env_production: {
      NODE_ENV: "production",
    }
  }]
}

然后调用 pm2 startpm2 start /path/to/ecosystem.config.js 从其他文件夹加载生态系统。

此处更好的模式是从您的代码中删除 dotenv 并在命令行中“要求”它。这使您的代码可以在任何环境(包括基于云的环境)之间很好地传输 - 这是环境变量的主要功能之一。

a) 将您的 .env 文件与您的脚本一起编写代码(例如 app.js)

b) 运行 没有 pm2 的脚本:

node -r dotenv/config app.js

c) 在 pm2.config.js 中:

module.exports = {
  apps : [{
    name      : 'My Application',
    script    : 'app.js',
    node_args : '-r dotenv/config',
    ...
  }],
}

然后 pm2 start pm2.config.js

注:在命令行中使用dotenv/config是dotenv自己推荐的最佳实践之一