节点启动后有没有办法设置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);
}
});
但我不知道犹太洁食是怎么回事,而且在进一步测试后它似乎并没有起作用。
答案 0 :(得分:1)
实现此目的的一种方法是创建.env文件并使用名为dotenv的npm库自动将.env文件变量加载到process.env中。步骤包括以下内容:
第1步:
在项目目录$ touch .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)完全是"合法" - 实际上,dotenv
和yenv
等图书馆如何发挥其魔力。