一旦Node.js脚本运行,是否可以获取更新的环境变量?

一旦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

一旦节点脚本已经运行,如何检索更新的环境变量

考虑以下吞咽任务。如何更新环境变量Z(即,从系统上运行的其他脚本),以便函数在运行后输出不同的值

按原样,在别处设置的环境变量将被忽略,函数始终输出“未定义”

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中想象的一样简单。谢谢!