我有一个服务器在NodeJS上运行,有没有办法在不重启服务器的情况下更新进程中的环境变量?我想做的是:1.启动我的服务器npm start
npm start
type something into the console to update ENV variable
pdtvr36n1#
从编程的Angular 来看,您应该能够更新传递给正在运行的进程的process.env变量。例如,运行:
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 来看,对于一个已经运行的应用程序,我不知道这个问题的答案。
pkwftd7m2#
可以调试Node.js进程并更改全局变量:
在 *nix上,即使进程没有在调试模式下启动,也可以启用调试。在Windows上,只能调试使用node --inspect启动的进程。This article详细解释了这两种可能性。显然,只有当环境变量始终直接用作process.env.FOO时,这才能起作用。如果最初使用它们的值,则以后更改process.env.FOO可能不会影响任何内容:
node --inspect
process.env.FOO
const FOO = process.env.FOO; ... console.log(FOO); // it doesn't matter whether process.env.FOO was changed at this point
iih3973s3#
如果你对env变量做了一个改变,只有当你通过系统的主属性对话框进行改变时,它们才会立即发生,这个对话框会进入我的电脑-〉高级属性-〉环境变量。除非我们在代码中显式地处理它,否则任何已经运行的程序都不会看到这些变化。其背后的逻辑是,有一个代理发送广播WM_SETTINGCHANGE消息,并对所有应用程序进行更改,以便通知该更改。
b09cbbtk4#
Here's a good explanation关于如何在mac os中设置环境变量。另外,正如其他人已经回答的那样,您可以使用process.env.ANY_VARIABLE = 'some value'设置它们。
process.env.ANY_VARIABLE = 'some value'
nafvub8i5#
我正试图找到一个跨平台的答案(mac,linux,windows)对于mac,我发现的一个变通方法是使用
const shell = require("shelljs"); console.log(shell.exec('launchctl getenv TEST'));
仅当您使用launchctl setenv TEST blahblah设置环境变量(例如在其他终端选项卡中)时,它才起作用
launchctl setenv TEST blahblah
w8ntj3qf6#
您可以尝试使用这个javascript微型库来更新env变量,而不需要重新启动节点服务器:https://www.npmjs.com/package/runtime-node-refresh希望这能有所帮助。
6条答案
按热度按时间pdtvr36n1#
从编程的Angular 来看,您应该能够更新传递给正在运行的进程的
process.env
变量。例如,运行:
代码:
终端输出:
从服务器管理员的Angular 来看,对于一个已经运行的应用程序,我不知道这个问题的答案。
pkwftd7m2#
可以调试Node.js进程并更改全局变量:
在 *nix上,即使进程没有在调试模式下启动,也可以启用调试。在Windows上,只能调试使用
node --inspect
启动的进程。This article详细解释了这两种可能性。显然,只有当环境变量始终直接用作
process.env.FOO
时,这才能起作用。如果最初使用它们的值,则以后更改
process.env.FOO
可能不会影响任何内容:iih3973s3#
如果你对env变量做了一个改变,只有当你通过系统的主属性对话框进行改变时,它们才会立即发生,这个对话框会进入我的电脑-〉高级属性-〉环境变量。
除非我们在代码中显式地处理它,否则任何已经运行的程序都不会看到这些变化。
其背后的逻辑是,有一个代理发送广播WM_SETTINGCHANGE消息,并对所有应用程序进行更改,以便通知该更改。
b09cbbtk4#
Here's a good explanation关于如何在mac os中设置环境变量。另外,正如其他人已经回答的那样,您可以使用
process.env.ANY_VARIABLE = 'some value'
设置它们。nafvub8i5#
我正试图找到一个跨平台的答案(mac,linux,windows)
对于mac,我发现的一个变通方法是使用
仅当您使用
launchctl setenv TEST blahblah
设置环境变量(例如在其他终端选项卡中)时,它才起作用w8ntj3qf6#
您可以尝试使用这个javascript微型库来更新env变量,而不需要重新启动节点服务器:
https://www.npmjs.com/package/runtime-node-refresh
希望这能有所帮助。