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

Posted

技术标签:

【中文标题】从 Node.js 中设置全局环境变量【英文标题】:Set global environment variable out of Node.js 【发布时间】:2015-12-07 23:50:23 【问题描述】:

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

目标是:

    重启APP时,环境变量还是要设置的 当打开一个新的 shell 时,它应该是可用的 如果可能:重启时,同1。 它应该可以在 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 出了什么问题?

【问题讨论】:

了解它为什么给你ENOENT查看***.com/questions/19902828/… 【参考方案1】:

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

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

process.env.YOUR_VAR = 'your_value';

【讨论】:

【参考方案2】:

试试看:

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

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

示例代码:

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

【讨论】:

你是对的,使用 child_process 不起作用。思想导出使事情变得全球化,其效果与父外壳无关...... 它也不能在 Windows 中工作。 shelljs 的主要目标是多平台【参考方案3】:

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

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

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

.

【讨论】:

我认为这是一个独立的命令......这很糟糕。所以我需要打开一个文件并写入它。妈的…… ***.com/questions/4870328/… 展示了如何访问您的环境而无需脱壳。它也适用于写入。

以上是关于从 Node.js 中设置全局环境变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Dockerfile 中设置 Node 环境变量以运行 node.js 应用程序?

运行 cron 作业 (Node.js) 时如何在 Amazon Elastic Beanstalk 中设置环境变量?

在 Xcode 构建阶段运行脚本中设置全局环境变量

在 Google Cloud Function 中设置环境变量

如何在AWS Almbda中设置环境变量或使用即时客户端库

如何从Inno Setup安装程序设置全局环境变量?