从 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 中设置环境变量?