繁体   English   中英

如何在javascript中设置环境变量

[英]How to set environment variables in javascript

我正在尝试设置一些可以由我的 bash 脚本获取的环境变量。

执行顺序:

版本.js

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

脚本文件

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

但回声输出是

APP_VERSION=

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

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

例子

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

什么都不打印,因为test.js在它自己的进程中运行

$  source test.sh
echo $FOOBAR

打印 'Testing' 因为在这种情况下 test.sh 是由当前 bash 进程本身读取和处理的。

您真正能做的最好的事情是导出一个 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,那么您需要输出的内容会发生变化。 这也不是执行此操作的正常方法。

更常见的方法可能是仅输出节点的值

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

您可以使用ShellJS

var shell = require('shelljs');
shell.echo('APP_VERSION="0.0.1"');

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

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
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM