当前位置: 首页 > 知识库问答 >
问题:

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

公西凯捷
2023-03-14

我正在尝试从我的node.js应用程序中设置一个全局环境变量。

目标是:

  1. 重启APP时,仍应设置环境变量
  2. 打开新外壳时,它应该可用
  3. 如果可能:重新启动时,与 1 相同。
  4. 它应该适用于 Linux、Mac OS X(并且需要一个备用的 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上正确的命令是导出GLOBALVARNAME=value。对于Windows,正确的命令应该是设置GLOBALVARNAME=value-不是吗?

所以主要问题是:手动工作导出GLOBALVARNAME=fobar出了什么问题?

共有3个答案

孙弘博
2023-03-14

试试这个:

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

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

示例代码:

var shell = require('shelljs');
shell.exec('export ENV_VARIABLE=ABRACADABRA');
栾景胜
2023-03-14

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

不能为不是当前进程后代的进程设置环境变量。而且在Linux下,没有系统环境变量这种东西。

在Linux下,您的变量应该在生成应用程序的init脚本中设置,或者在systemd单元中设置。如果希望它在交互式用户shells中可用,应该在< code>/etc/profile或< code>/etc/profile.d中设置它

.

卜和悌
2023-03-14

正如其他答案所指出的那样,炮轰和改变环境变量基本上是一个NO-OP。您要么要更改当前进程及其子进程的环境,要么要为新进程更改环境。编辑 /etc/profile 将对任何新进程进行更改,如@Hmlth所说。

如果您想更改当前流程的环境,这很简单:

process.env.YOUR_VAR = 'your_value';
 类似资料:
  • 问题内容: 使用JetBrains的WebStorm官方Node插件(以及它们的其他IDE)运行Node.js应用程序时,是否可以设置环境变量? 问题答案: 不,从WebStorm不可能,应该在系统中定义环境变量。 更新:在新版本中,可以在“运行/调试”配置中设置环境变量。

  • 我需要在我所有的idea运行配置中使用一个环境变量。我目前使用run- 我试图设置env变量在我的linux系统使用在各种会话配置文件:,,,但是intellij在运行过程中似乎忽略了这些变量,即使当我从intellij内置终端启动时,它显示了正确的输出。 我也尝试使用intellij. env文件插件,然后设置在文件在项目根。也没起作用。

  • 问题内容: 我在这里问: node.js是否需要继承? 有人告诉我可以通过省略var将变量设置为全局范围。 这对我不起作用。 即: 不能使_在必需文件上可用。我可以设置express ,但可以在其他地方使用。 有人可以确认这应该起作用吗?谢谢。 问题答案: 您可以这样使用:

  • 本文向大家介绍Lua中全局变量与非全局环境介绍,包括了Lua中全局变量与非全局环境介绍的使用技巧和注意事项,需要的朋友参考一下 今天来聊两个话题——全局变量和非全局环境。 正如大家目前心里所感受到的,全局变量的内容很简单,而非全局环境的内容就稍微要锻炼一下脑细胞了。 1.全局变量的原形 在Lua中,要声明全局变量很简单,那就是定义变量的时候,前面不要加上local。 这个神秘的全局变量,其实本质上

  • 我使用的是swing,有一个函数(CreateAndShowGUI())可以监听上、左、右键的按下 现在,当我运行程序并按下任意键(向上、向左、向右、向下)时,我可以看到按下的键变量被设置为True。但当我试图在main中访问相同的内容时,按下的这个键的值为false。谁能帮我找出我错的地方吗?

  • 问题内容: 有没有一种方法可以在Linux中使用C设置环境变量? 我尝试了和,但是它们似乎并没有为我工作。 问题答案: 我将在这里做出一个疯狂的猜测,但是这些功能似乎不起作用的正常原因不是因为它们不起作用,而是因为用户并不真正了解环境变量的工作原理。例如,如果我有此程序: 然后我从外壳程序运行它,它不会修改外壳程序的环境- 子进程无法做到这一点。这就是为什么内置可修改环境的shell命令的原因,以