一旦Node.js脚本运行,是否可以获取更新的环境变量?
一旦节点脚本已经运行,如何检索更新的环境变量 考虑以下吞咽任务。如何更新环境变量Z(即,从系统上运行的其他脚本),以便函数在运行后输出不同的值 按原样,在别处设置的环境变量将被忽略,函数始终输出“未定义”一旦Node.js脚本运行,是否可以获取更新的环境变量?,node.js,gulp,environment-variables,Node.js,Gulp,Environment Variables,一旦节点脚本已经运行,如何检索更新的环境变量 考虑以下吞咽任务。如何更新环境变量Z(即,从系统上运行的其他脚本),以便函数在运行后输出不同的值 按原样,在别处设置的环境变量将被忽略,函数始终输出“未定义” gulp.task('z', function () { var z; setInterval(function(){ z = process.env.Z; console.log('Value of Z is: ' + z); }, 1
gulp.task('z', function () {
var z;
setInterval(function(){
z = process.env.Z;
console.log('Value of Z is: ' + z);
}, 1000);
});
运行Windows7。我已经尝试了
set
和setx
,但是运行的节点脚本中没有任何内容。我认为这是不可能的,因为如果不重新启动命令提示(并使用setx
),通常无法在命令提示之间传递环境变量。但话说回来,用户是特别的,我以前也很惊讶。这可能吗?是的,这是可能的。其实有很多选择。您可以使用“进程间通信(IPC)”在多个脚本之间传递变量
最简单的选择可能是通过套接字实现,即使用redis。这样做的好处是,如果将来需要,您还可以使用它在不同设备上运行的进程之间进行通信
另一种选择是通过内置过程信号:
还有许多其他选项/库,各有其优缺点。对于可伸缩性,通过套接字进行通信可能是最好的选择,如果性能非常重要,则可以选择使用共享内存的选项
在这个问题上讨论了多种选择;
由于某些原因,我没有考虑IPC,我一直在通过env变量创建一个简单的标志轮询机制。我最终使用了zmq(zeromq),这和我在node中想象的一样简单。谢谢!