NodeJS / Nodemon - 重新启动服务器上的环境变量

时间:2017-11-17 19:54:54

标签: node.js bash nodemon

我正在使用Nodemon运行Node / Express应用程序...我有一个环境变量,我想在每次Nodemon重新启动应用程序时重置,但我发现尽管重置脚本运行,但环境变量无法访问在正在运行的应用程序让我打破这个......

首先,我在Mac上运行它。

我的应用中有一个bash脚本,用于获取当前日期时间并将export设置为环境变量 -

env_publich.sh

#!/bin/bash
BUILD_DATE=`node ./scripts/version_info/get_build_date.js`
export BUILD_DATE=$BUILD_DATE
echo Setting environment variables: BUILD_DATE="$BUILD_DATE"

get_build_date.js只返回一个简单的JS new Date()对象)

package.json开始,start脚本很简单:

"start": "nodemon app.js"

在我的nodemon.json中,理想情况下我想调用bash脚本来生成新的环境变量 - 在我的想象中,这可以解决问题:

"events": {
    "start": "source env_public.sh"
},
"env": {
    "NODE_ENV": "development",
    "PORT": 3000
}

但事实并非如此。虽然NODE_ENVPORT可以按预期使用,但BUILD_DATE无法使用app.js,尽管脚本已运行(如果附加,则可在环境中看到该值&& env到Nodemon start事件。)

我猜这与父/子进程的关系有关,但这不是我熟悉的主题......如果我在NPM中调用source env_public.sh && nodemon app.js {{1在start中可以访问该值,但在Nodemon重新启动时它不会更新。好吧,我有点理解,但似乎对我来说app.js是Nodemon的孩子,因为它继承了上面定义的两个app.js变量......也许我在env中使用了错误的命令?

简而言之,无论如何,我是否可以在使用Nodemon时动态重置环境变量,并为正在运行的应用程序提供新值?

1 个答案:

答案 0 :(得分:0)

最简单的方法是直接在JavaScript代码中设置环境变量BUILD_DATE

process.env.BUILD_DATE = new Date().toString();
console.log(process.env.BUILD_DATE);