2015-12-22 47 views
1

一旦节点脚本已经在运行,如何检索一个更新的环境变量?一旦Node.js脚本运行,是否可以获取UPDATED环境变量?

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

因为在其他地方设置的环境变量被忽略,函数总是输出'undefined'。

gulp.task('z', function() { 
    var z; 
    setInterval(function(){ 
     z = process.env.Z; 
     console.log('Value of Z is: ' + z); 
    }, 1000); 

}); 

运行Windows 7我曾经尝试都setsetx但没有将持续到正在运行的节点脚本。我不认为这是可能的,因为通常不能在命令提示符之间传递环境变量而不重新启动它们(并使用setx)。但是,那么用户是特殊的,我之前感到很惊讶。这甚至有可能吗?

回答

1

是的,这是可能的。实际上有很多选择。您可以通过'进程间通信(IPC)'在多个脚本之间传递变量...

最简单的选项可能是通过套接字来完成,即使用redis。这样做的好处是,如果将来需要这样做,您还可以使用它在不同设备上运行的进程之间进行通信。

另一种选择是通过内置的过程中的信令做到这一点: https://nodejs.org/api/process.html#process_signal_events

还有许多其他的选择/图书馆与他们的每一个职业的利弊。对于可伸缩性,您可能最擅长通过套接字进行通信,如果性能非常重要,则可以选择使用共享内存的选项。

在这个问题中讨论了多个选项; What's the most efficient node.js inter-process communication library/method?

+0

出于某种原因,我没有考虑过IPC,我被挂在创建一个简单的标志轮询机制通过env变量。我最终使用了zmq(zeromq),它在节点中尽可能简单。谢谢! – JoshuaDavid

相关问题