gpt4 book ai didi

javascript - node.js + pm2 -- 根据环境配置node_args

转载 作者:行者123 更新时间:2023-12-01 02:40:28 24 4
gpt4 key购买 nike

下面是一个非常简单的 process.json,用于使用 pm2 启动 js 应用程序。

我的目标是让该过程启动下面的node_args,但仅限于非产品启动。因此,例如,如果某个环境变量以某种方式设置,则触发node_args,否则忽略它们。

这可能吗?如果没有,我可以采取任何解决方法吗?

{
apps : [
{
name : 'API',
script : './app.js',
node_args: ["--inspect","--debug=0.0.0.0:7000"],
env: {
NODE_ENV: 'development'
}
}
]
}

我知道可以在命令行中抛出node_args,但是目标是在 docker 中运行它,其中“run”命令对于源镜像是静态的,因此这并不真正可行。

这是我的 Dockerfile 中的 CMD 条目:

CMD [“pm2-docker”、“--auto-exit”、“--watch”、“process.json”]

最佳答案

您可以定义同一应用程序的多个声明,具体取决于其环境设置。

在您的情况下,您的流程文件定义可以如下:

process.json

{
apps : [
{
name : 'API-DEV',
script : './app.js',
node_args: ["--inspect","--debug=0.0.0.0:7000"],
env: {
NODE_ENV: 'development'
}
},
{
name : 'API-PROD',
script : './app.js',
env: {
NODE_ENV: 'production'
}
}
]
}

然后,如果您想运行开发版本的应用程序,DockerfileCMD条目将为

CMD [ "pm2-docker", "start", "process.json", "--only", "API-DEV", "--auto-exit", "--watch" ] 

如果您不喜欢重复,您可以使用 .config.js 文件而不是 json 并像这样定义您的配置

process.config.js

const appDefs = [
{
"suffix": "prod",
"node_args": [],
"env": {
"NODE_ENV": "production"
}
},
{
"suffix": "dev",
"node_args": ["--inspect","--debug=0.0.0.0:7000"],
"env": {
"NODE_ENV": "development"
}
}
];

module.exports = {
"apps": appDefs.map(appDef => ({
"name": `API-${appDef.suffix}`,
"script": "./app.js",
"node_args": appDef.node_args,
"env": appDef.env
}))
};

然后,CMD条目将是

CMD [ "pm2-docker", "start", "process.config.js", "--only", "API-DEV", "--auto-exit", "--watch" ] 

关于javascript - node.js + pm2 -- 根据环境配置node_args,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47602950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com