如何更新ENV变量在一个进程中而不重新启动它(NodeJS)?

qyyhg6bp  于 2022-12-22  发布在  Node.js
关注(0)|答案(6)|浏览(190)

我有一个服务器在NodeJS上运行,有没有办法在不重启服务器的情况下更新进程中的环境变量?
我想做的是:
1.启动我的服务器npm start

  1. type something into the console to update ENV variable
    1.服务器使用新环境变量重新启动
pdtvr36n

pdtvr36n1#

从编程的Angular 来看,您应该能够更新传递给正在运行的进程的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

从服务器管理员的Angular 来看,对于一个已经运行的应用程序,我不知道这个问题的答案。

pkwftd7m

pkwftd7m2#

可以调试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
iih3973s

iih3973s3#

如果你对env变量做了一个改变,只有当你通过系统的主属性对话框进行改变时,它们才会立即发生,这个对话框会进入我的电脑-〉高级属性-〉环境变量。
除非我们在代码中显式地处理它,否则任何已经运行的程序都不会看到这些变化。
其背后的逻辑是,有一个代理发送广播WM_SETTINGCHANGE消息,并对所有应用程序进行更改,以便通知该更改。

b09cbbtk

b09cbbtk4#

Here's a good explanation关于如何在mac os中设置环境变量。另外,正如其他人已经回答的那样,您可以使用process.env.ANY_VARIABLE = 'some value'设置它们。

nafvub8i

nafvub8i5#

我正试图找到一个跨平台的答案(mac,linux,windows)
对于mac,我发现的一个变通方法是使用

const shell = require("shelljs");  

console.log(shell.exec('launchctl getenv TEST'));

仅当您使用launchctl setenv TEST blahblah设置环境变量(例如在其他终端选项卡中)时,它才起作用

w8ntj3qf

w8ntj3qf6#

您可以尝试使用这个javascript微型库来更新env变量,而不需要重新启动节点服务器:
https://www.npmjs.com/package/runtime-node-refresh
希望这能有所帮助。

相关问题