如何在不重新启动进程的情况下更新进程中的 ENV 变量(NodeJS)?

nik*_*ohn 5 shell terminal restart process node.js

我有一台在 NodeJS 上运行的服务器。有没有办法在不重启服务器的情况下更新进程中的环境变量?

我想做的是:

  1. 启动我的服务器 npm start
  2. type something into the console to update ENV variable
  3. 服务器使用新的环境变量重新启动

jsa*_*ler 5

从编程的角度来看,您应该能够更新process.env传递到正在运行的进程中的变量。

例如,运行:

cmd_line$: MY_VALUE=some_val node ./index.js
Run Code Online (Sandbox Code Playgroud)

与代码:

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)
Run Code Online (Sandbox Code Playgroud)

终端输出:

some_val
some other value
4
Run Code Online (Sandbox Code Playgroud)

从服务器管理的角度来看,对于已经运行的应用程序,我不知道答案。


Est*_*ask 5

可以调试 Node.js 进程并更改全局变量:

调试

在 *nix 上,即使进程未在调试模式下启动,也可以启用调试。在 Windows 上,可以仅调试以node --inspect. 本文详细解释了这两种可能性。

显然,只有当环境变量始终直接用作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
Run Code Online (Sandbox Code Playgroud)


Lea*_*ode 3

如果您对环境变量进行更改,只有当您通过系统的主属性对话框进行更改时,这些变量才会立即发生,该对话框将转到我的计算机 -> 高级属性 -> 环境变量。

任何已经运行的程序都不会看到更改,除非我们在代码中显式处理它。

其背后的逻辑是,有一个代理发送广播 WM_SETTINGCHANGE 消息并对所有应用程序进行更改,以便通知该更改。