如何在JavaScript中设置环境变量

3

我正在尝试设置一些环境变量,这些变量可以被我的bash脚本捕捉到。

执行顺序:

version.js

module.exports.version = function () {
   process.env['APP_VERSION'] = `1.0.0`;
}

script.sh

run x 
run y
node -e "require('./version.js').version()"
echo "APP_VERSION=$APP_VERSION"

但是回显输出为:
APP_VERSION=
3个回答

4

这是不可能的。这不是节点的问题,甚至在其他语言中也不可能。如果子进程可以修改其父进程的环境变量,那将是一个巨大的安全问题。

export 在 bash 进程本身中工作的唯一原因是你通过“源”它们在 bash 进程中运行这些脚本,因此它正在修改自己的环境变量。

示例

#!/bin/sh
# test.sh
export FOOBAR=Testing

$ ./test.sh
echo $FOOBAR

没有输出任何内容,因为test.js在它自己的进程中运行。

$  source test.sh
echo $FOOBAR

在这种情况下,test.sh被当前的bash进程本身读取和处理,因此输出'Testing'。

你真正能做的最好的事情是导出一个shell脚本,然后让shell执行它。

// example.js
const key = 'FOOBAR';
const value = `hello world: ${(new Date()).toString()}`;
console.log(`export "${key}"="${value}"`)

node example.js | source /dev/stdin 
echo $FOOBAR

当然,输出的结果是针对你当前使用的shell而言的,这意味着如果你切换了shell,你需要输出的内容也会改变。这也不是一种常规的方法。
更常见的方法可能是仅从node中输出值。
run x 
run y
$APP_VERSION=`node -e "console.log(require('./version.js').version())"`
echo "APP_VERSION=$APP_VERSION"

0
你可以使用ShellJS
var shell = require('shelljs');
shell.echo('APP_VERSION="0.0.1"');

0

利用Dotenv,您可以将所有环境变量维护在一个文件中,并适当地使用它们,有助于更好的版本控制,因为它将配置存储在与代码分离的环境中。

Dotenv是一个零依赖模块,可将环境变量从.env文件加载到process.env中。

用法 1. 创建.env文件

DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3

2.process.env现在拥有您在.env文件中定义的键和值。

const db = require('db')
db.connect({
  host: process.env.DB_HOST,
  username: process.env.DB_USER,
  password: process.env.DB_PASS
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接