簡體   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