在Node.js中设置全局环境变量



我试图设置一个全局环境变量出我的node.js应用程序。

目标是:

  1. 重新启动APP时,仍应设置环境变量
  2. 当打开一个新的shell时,它应该是可用的
  3. 如果可能:重新启动时,与1.
  4. 相同。
  5. 它应该在Linux, Mac OS X上工作(并且需要一个windows的替代SET命令)

我是这样做的:

var setEnv = require('child_process')
        .spawn('export GLOBALVARNAME='+my.value,{
          stdio: 'inherit',
          env: process.env
        });

但是这会导致

{ [Error: spawn export GLOBALVARNAME=foobar ENOENT]
  code: 'ENOENT',
  errno: 'ENOENT',
  syscall: 'spawn export GLOBALVARNAME=foobar',
  path: 'export GLOBALVARNAME=foobar',
  spawnargs: [] }

我没有在Windows上测试,但在Mac OS X(和Linux)上bash的正确命令是export GLOBALVARNAME=value。对于Windows,正确的命令应该是SET GLOBALVARNAME=value -不是吗?

所以主要的问题是:手动工作的export GLOBALVARNAME=foobar出了什么问题?

正如其他答案所指出的那样,剥离和更改环境变量基本上是不允许的。您要么想为当前流程及其子流程更改环境,要么想为新流程更改环境。编辑/etc/profile将对任何新进程进行更改,如@Hmlth所示。

如果你想改变当前进程的环境,这是直接的:

process.env.YOUR_VAR = 'your_value';

export不是一个独立的命令,而是一个shell内置命令,用于为当前shell进程及其分支的子进程设置环境变量。

不能为非当前进程的后代进程设置环境变量。在Linux下,没有系统环境变量这回事。

在Linux下,变量应该在生成应用程序的初始化脚本或systemd单元中设置。如果您希望它在交互式用户shell中可用,则应该在/etc/profile/etc/profile.d

中设置它。

.

试一试:

https://www.npmjs.com/package/shelljs

我认为子进程不可能改变父进程的进程环境。所以我真的不认为使用child_process是可能的。

示例代码:

var shell = require('shelljs');
shell.exec('export ENV_VARIABLE=ABRACADABRA');

相关内容

  • 没有找到相关文章

最新更新