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

问题描述 投票:3回答:2

我通过这种方式将我的应用程序的实例作为带有PM2的package.json脚本启动:

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

我发现并非团队中的所有成员都希望在开发时使用max作为实例数的值,但更喜欢使用较低的值。

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

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

我怎样才能做到这一点?

javascript node.js pm2
2个回答
0
投票

这里更好的模式是从代码中删除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 : dotenv/config',
    ...
  }],
}

然后pm2 start pm2.config.js

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


2
投票

您可以在“env:”属性下创建ecosystem.config.js文件和declare your environment variables,在您的情况下,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从其他文件夹加载生态系统。

© www.soinside.com 2019 - 2024. All rights reserved.