如何使用Node设置环境变量?

时间:2019-04-03 04:39:30

标签: node.js bash process environment-variables

我试图自动设置三个AWS环境变量(AWS_ACCESS_KEYAWS_ACCESS_IDAWS_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,要使用JSON来操作JSON会比较棘手)以这种方式设置环境变量?

3 个答案:

答案 0 :(得分:1)

当您使用bash脚本设置环境变量并在shell中运行时,只有在 same 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在全局添加配置。请参阅how-to-set-global-environment-variable

答案 1 :(得分:0)

您可以读取JSON文件并在process.env中设置环境变量:

export const updateActivePage = (activePage) => {
  return (dispatch) => {
    return new Promise((res, rej) => {
      dispatch ({
        type: UPDATE_ACTIVEPAGE,
        payload: activePage
      });
      res(true);
    })
  }
}

NB :仅适用于该特定节点进程及其子进程,不适用于全局。

答案 2 :(得分:0)

作为对已接受答案的扩展, 您还可以在文件中定义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文件中

https://github.com/motdotla/dotenv