[英]How to set environment variables using Node?
我正在嘗試自動設置三個AWS環境變量( AWS_ACCESS_KEY
, AWS_ACCESS_ID
和AWS_SESSION_TOKEN
),這些變量是從aws sts assume-role
AWS_SESSION_TOKEN
aws sts assume-role
返回的JSON派生的。
通常,如果我想自動設置環境變量,我會寫一個Bash腳本,例如setvars.sh
:
export AWS_ACCESS_KEY=something
接着
source setvars.sh
我知道,如果您在Node腳本中執行process.env.AWS_ACCESS_KEY = 'something'
,則不會影響父進程。
是否有一種解決方法可以使用Node腳本(而不是Bash,使用Bash來操作JSON會很棘手)以這種方式設置環境變量?
當您使用bash腳本設置環境變量並在shell中運行時 ,只有在同一shell中運行的進程才能訪問它們。 因此,您將需要在同一外殼中運行Node應用程序以訪問這些變量。
現在,另一種方法是將它們添加到process.env
對象中,因此您可以編寫配置腳本來僅加載所有配置變量並將其要求在Node應用程序的頂部。 您需要以一種可以在同一文件中使用所有配置的方式來設計應用程序。
例如:
config.js:
process.env.AWS_ACCESS_KEY = 'something'
app.js:
// Starting point of your app
require('./config');
const app = require('express')();
// Use the config
// AWS_API(process.env.AWS_ACCESS_KEY);
// Other App Logic
這種方法主要用於開發環境,在生產中,您可能要使用第一種方法,或者可以使用/etc/profile
或/etc/environment
全局添加配置。 請參閱如何設置全局環境變量
您可以讀取JSON文件並在process.env中設置環境變量:
process.env['environment_variable_name'] = 'environment_variable_value';
注意 :這僅適用於該特定節點進程及其子進程,不適用於全局。
作為對已接受答案的擴展,您還可以在文件中定義ENV,並根據發行版導入特定的env配置。
這樣,您可以根據需要在靜態配置中為登台,開發或生產環境設置ENV文件。
從dotenv倉庫/文檔
盡早在您的應用程序中,要求並配置dotenv。
require('dotenv').config()
在項目的根目錄中創建一個.env文件。 在新行上以NAME = VALUE的形式添加特定於環境的變量。 例如:
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
現在,process.env具有在.env文件中定義的鍵和值。
const db = require('db')
db.connect({
host: process.env.DB_HOST,
username: process.env.DB_USER,
password: process.env.DB_PASS
})
因此,對於您來說,您可能想從AWS進行異步調用以獲取這些ENV變量,或者也許將它們保存在.env
文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.