我有一台运行在NodeJS上的服务器。是否可以在不重启服务器的情况下更新进程中的环境变量?
我想要做的是:
npm start
type something into the console to update ENV variable
答案 0 :(得分:1)
如果对环境变量进行更改,则只有在通过要进入我的计算机的系统的“属性”主对话框中进行更改时,这些更改才会立即发生->高级属性->环境变量。
任何正在运行的程序都不会看到更改,除非我们在代码中显式处理它。
其背后的逻辑是,有一个代理发送广播WM_SETTINGCHANGE消息并对所有应用程序进行更改,以通知该更改。
答案 1 :(得分:1)
从编程的角度来看,您应该能够更新传递给正在运行的进程的process.env
变量。
例如,运行:
cmd_line$: MY_VALUE=some_val node ./index.js
包含代码:
console.log(process.env.MY_VALUE)
process.env.MY_VALUE = 'some other value'
console.log(process.env.MY_VALUE)
process.env.MY_VALUE = 4
console.log(process.env.MY_VALUE)
终端输出:
some_val
some other value
4
从服务器管理员的角度来看,已经运行的应用程序,我不知道答案。
答案 2 :(得分:1)
可以调试Node.js进程并更改全局变量:
在* nix上,即使未在调试模式下启动进程,也可以启用调试。在Windows上,只能调试以node --inspect
开始的进程。 This article详细说明了这两种可能性。
显然,只有在始终将环境变量始终用作process.env.FOO
的情况下,此方法才有效。
如果最初使用它们的值,则以后更改process.env.FOO
可能不会有任何影响:
const FOO = process.env.FOO;
...
console.log(FOO); // it doesn't matter whether process.env.FOO was changed at this point
答案 3 :(得分:0)
Here's a good explanation,了解如何在Mac OS中设置环境变量。另外,正如其他人已经回答的那样,您可以使用process.env.ANY_VARIABLE = 'some value'
进行设置。
答案 4 :(得分:0)
我正在尝试找到针对此问题的跨平台答案(mac,linux,windows)
对于Mac,我发现的一种解决方法是使用
const shell = require("shelljs");
console.log(shell.exec('launchctl getenv TEST'));
仅当您使用launchctl setenv TEST blahblah
设置环境变量(例如,在其他终端选项卡中)时,它才有效