运行节点可执行文件后导出NODE_PATH

时间:2016-05-21 22:09:59

标签: node.js environment-variables

节点启动后有没有办法设置NODE_PATH env变量?

如果我这样做:

async.series([
        function export_NODE_PATH(cb){
          cp.exec('export NODE_PATH=$(npm root -g):$NODE_PATH',cb);
        },...

它不起作用,但如果我在启动节点之前设置NODE_PATH,它将按预期工作

export NODE_PATH=$(npm root -g):$NODE_PATH && node index --transpile test

有没有办法在node.js运行时设置环境变量,而不需要在执行之前在命令行设置它?它是否像在运行时设置process.env.NODE_PATH一样简单?

例如,这似乎有效:

    cp.exec('echo $(npm root -g)', function (err, stdout, stderr) {
    if (err || String(stdout).match(/error/i) || String(stderr).match(/error/i)) {
        cb(err || stdout || stderr);  // my funky way of handling this
    }
    else {
        process.env.NODE_PATH += stdout;
        cb(null);
     }
    });

但我不知道犹太洁食是怎么回事,而且在进一步测试后它似乎并没有起作用。

2 个答案:

答案 0 :(得分:1)

实现此目的的一种方法是创建.env文件并使用名为dotenv的npm库自动将.env文件变量加载到process.env中。步骤包括以下内容:

第1步:   在项目目录$ touch .env

中创建.env文件

第2步:将以下文字放入.env档案“NODE_ENV=yourvaluehere”(不含引号)

第3步:  安装dotenv $ npm install dotenv --save

第3步:  在js文件中运行以启动服务器,添加以下require('dotenv').config();

Viola,您现在通过env文件在节点进程中设置环境变量。您的process.env会将所有键值对存储在.env文件中!

答案 1 :(得分:1)

设置process.env.NODE_PATH(或任何其他env var)完全是"合法" - 实际上,dotenvyenv等图书馆如何发挥其魔力。