如何在 javascript 中设置环境变量
How to set environment variables in javascript
我正在尝试设置一些可以被我的 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=
您可以使用 ShellJS.
var shell = require('shelljs');
shell.echo('APP_VERSION="0.0.1"');
利用 Dotenv,您可以在其中维护一个文件中的所有 env 变量并适当地使用它们,这有助于更好的版本控制,因为它将配置与代码分开存储在环境中。
Dotenv is a zero-dependency module that loads environment variables
from a .env file into 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
})
This is not possible。这不是节点的问题,甚至任何其他语言都不可能。如果子进程可以修改其父进程的环境变量,那将是一个巨大的安全问题。
export
在 bash 进程本身中工作的唯一原因是因为你 运行 由 "sourcing" 他们在 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 的 运行ning 的意思,如果你切换 shells 那么你需要输出的内容就会改变。这也不是执行此操作的正常方法。
一种更常见的方法可能是只输出节点的值
run x
run y
$APP_VERSION=`node -e "console.log(require('./version.js').version())"`
echo "APP_VERSION=$APP_VERSION"
我正在尝试设置一些可以被我的 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=
您可以使用 ShellJS.
var shell = require('shelljs');
shell.echo('APP_VERSION="0.0.1"');
利用 Dotenv,您可以在其中维护一个文件中的所有 env 变量并适当地使用它们,这有助于更好的版本控制,因为它将配置与代码分开存储在环境中。
Dotenv is a zero-dependency module that loads environment variables from a .env file into 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
})
This is not possible。这不是节点的问题,甚至任何其他语言都不可能。如果子进程可以修改其父进程的环境变量,那将是一个巨大的安全问题。
export
在 bash 进程本身中工作的唯一原因是因为你 运行 由 "sourcing" 他们在 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 的 运行ning 的意思,如果你切换 shells 那么你需要输出的内容就会改变。这也不是执行此操作的正常方法。
一种更常见的方法可能是只输出节点的值
run x
run y
$APP_VERSION=`node -e "console.log(require('./version.js').version())"`
echo "APP_VERSION=$APP_VERSION"