设置要检索的节点的环境变量

use*_*173 386 environment-variables node.js

我正在尝试按照教程说它:

"有几种方法可以加载凭据.

  1. 从环境变量加载,
  2. 从磁盘上的JSON文件加载,

密钥需要如下:

USER_ID, USER_KEY
Run Code Online (Sandbox Code Playgroud)

...这意味着如果您正确设置环境变量,则根本不需要在应用程序中管理凭据."

基于一些谷歌搜索,似乎我需要设置变量process.env?我如何以及在何处设置这些凭据?示例请.

Sam*_*amT 373

环境变量(在本例中)用于将凭据传递给您的应用程序.USER_ID并且USER_KEY可以分别从process.env.USER_ID和访问process.env.USER_KEY.您无需编辑它们,只需访问其内容即可.

看起来他们只是给你的加载之间的选择USER_ID,并USER_KEY从任一process.env或磁盘上的一些specificed文件.

现在,当您运行应用程序时,会发生魔力.

USER_ID=239482 USER_KEY=foobar node app.js

这将传递用户ID 239482和用户密钥为foobar.这适用于测试,但是对于生产,您可能会配置一些bash脚本来导出变量.

  • 如果你使用`fish`而不是`bash`,你需要使用:`env USER_ID = 239482 my_command`.例如,为node.js的`debug`库设置环境变量:`env DEBUG ='*'node some_file.js` http://fishshell.com/docs/current/faq.html#faq-single-env (26认同)

ctr*_*usb 187

我强烈建议您查看dotenv包.

https://github.com/motdotla/dotenv

它类似于@Benxamin在答案中建议的库,但它更清晰,不需要任何bash脚本.另外值得注意的是,代码库很受欢迎且维护良好.

基本上你需要一个.env文件(我强烈建议你从你的git/mercurial/etc中忽略它):

FOO=bar
BAZ=bob
Run Code Online (Sandbox Code Playgroud)

然后在您的应用程序条目文件中尽早放入以下行:

require('dotenv').config();
Run Code Online (Sandbox Code Playgroud)

繁荣.完成.'process.env'现在将包含上面的变量:

console.log(process.env.FOO);
// bar
Run Code Online (Sandbox Code Playgroud)

'.env'文件不是必需的,因此您无需担心您的应用程序在不存在时会丢失.

  • 如果您正在寻找额外的安全性,请https://github.com/rolodato/dotenv-safe并进行一些测试. (6认同)
  • 尽管如果您确实提供了您的应用程序所需的相关配置详细信息(例如此问题正在查询),那么它可能会在没有它的情况下失败......但它似乎仍然是一个不错的选择。 (2认同)
  • 我曾经是盲人,现在我可以看到 (2认同)

pal*_*nik 96

只需在命令行上提供env值

USER_ID='abc' USER_KEY='def' node app.js
Run Code Online (Sandbox Code Playgroud)

  • 这仍然不适用于Windows :( (23认同)
  • 对于Windows使用:SET USER_ID ='abc' (9认同)
  • 我们可以使用cross-env包(https://www.npmjs.com/package/cross-env)使其适用于unix或windwos (5认同)
  • 只是添加它在Windows上使用bash shell(cygwin;我认为使用git工具安装). (2认同)

jsb*_*sht 72

您可以通过进程全局变量设置环境变量,如下所示:

process.env['NODE_ENV'] = 'production';
Run Code Online (Sandbox Code Playgroud)

适用于所有平台.

  • @Soren我们启动子进程的节点程序得益于这个答案,所以虽然它有点不正统,但也有用例 (38认同)
  • 这对于例如在运行测试时设置和覆盖环境也很有用. (24认同)
  • ...环境变量旨在从代码的外部设置,而不是在内部 - 所以这是打败目的和一个坏的例子 (17认同)
  • 如果您在js中编写构建脚本并从npm运行它们,这将非常有用 (16认同)
  • @pspi - 我99%肯定*你做错了*除非你是[配置包](https://www.npmjs.com/search?q=config)的作者,如[this] (https://www.npmjs.com/package/config)你应该使用这样的配置包. (2认同)

Ben*_*min 51

如果您需要管理选项,请尝试使用envs npm包.如果已设置,则返回环境值.否则,您可以指定存储在全局默认对象变量中的默认值(如果它不在您的环境中).

使用.env("dot ee-en-vee")或环境文件有很多原因.个人可以管理他们自己的配置.您可以使用自己的环境设置将不同的环境(dev,stage,prod)部署到云服务.你可以设置合理的默认值.

.env文件中,每一行都是一个条目,如下例所示:

NODE_ENV=development
API_URL=http://api.domain.com
TRANSLATION_API_URL=/translations/
GA_UA=987654321-0
NEW_RELIC_KEY=hi-mom
SOME_TOKEN=asdfasdfasdf
SOME_OTHER_TOKEN=zxcvzxcvzxcv
Run Code Online (Sandbox Code Playgroud)

你应该包括.env在版本控制库(它添加到您的.gitignore文件).

要从.env文件中获取变量到您的环境中,您可以export NODE_ENV=development在启动应用程序之前使用bash脚本执行相应的操作.

#!/bin/bash
while read line; do export "$line";
done <source .env
Run Code Online (Sandbox Code Playgroud)

然后这将在您的应用程序javascript:

var envs = require('envs');

// If NODE_ENV is not set, 
// then this application will assume it's prod by default.
app.set('environment', envs('NODE_ENV', 'production')); 

// Usage examples:
app.set('ga_account', envs('GA_UA'));
app.set('nr_browser_key', envs('NEW_RELIC_BROWSER_KEY'));
app.set('other', envs('SOME_OTHER_TOKEN));
Run Code Online (Sandbox Code Playgroud)

  • 另外我建议使用"dotenv"模块,它将所有ENV变量放入proccess对象中,顺便说一下,它非常整洁. (4认同)
  • 嗯,我尝试使用这个包,但它似乎只跟踪环境变量的使用。它不读取 .env 文件(https://www.npmjs.com/package/envs)。它是一个正确的包吗? (2认同)
  • 你是对的!它不读取 .env 文件。这很尴尬。我忘了我是用@SamT 提到的 bash 脚本加载 .env 的,所以无论如何它都有效。 (2认同)

les*_*usz 34

这取决于您的操作系统和shell

带有shell bash的linux上,你可以创建这样的环境变量(在控制台中):

export FOO=bar
Run Code Online (Sandbox Code Playgroud)

有关ubuntu上的环境变量的更多信息(例如):

ubuntu上的环境变量

  • 那Windows呢?你能加到这里吗? (2认同)

Drk*_*ima 19

Windows 用户:注意!建议在 Unix 上使用这些命令,但在 Windows 上它们只是临时的。它们仅为当前 shell 设置一个变量,只要您重新启动机器或启动新的终端 shell,它们就会消失。

  • SET TEST="hello world"
  • $env:TEST = "hello world"

要在 Windows 上设置持久环境变量,您必须改用以下方法之一:

A) 项目中的 .env 文件- 这是最好的方法,因为这意味着您可以将项目移动到其他系统,而无需在该系统上设置环境变量,然后才能运行代码。

  1. .env在您的项目文件夹根目录中创建一个包含以下内容的文件:TEST="hello world"

  2. 编写一些将读取该文件的节点代码。我建议安装 dotenv ( npm install dotenv --save) 然后require('dotenv').config();在你的节点设置代码中添加。

  3. 现在您的节点代码将能够访问process.env.TEST

环境文件可以很好地保存您不想在代码库中包含的 api 密钥和其他秘密。只需确保将其添加到您的.gitignore.

B) 使用 Powershell - 这将创建一个可以在其他终端中访问的变量。但请注意,重新启动计算机后该变量将丢失。

[Environment]::SetEnvironmentVariable("TEST", "hello world", "User")

这种方法在 Windows 论坛上被广泛推荐,但我认为人们没有意识到系统重启后变量不会持续存在......

C) 使用 Windows GUI

  1. 在开始菜单搜索或控制面板中搜索“环境变量”
  2. 选择“编辑系统环境变量”
  3. 将打开一个对话。单击对话框底部的“环境变量”按钮。
  4. 现在您有一个用于编辑变量的小窗口。只需单击“新建”按钮即可添加新的环境变量。简单。


dpo*_*tro 12

就像ctrlplusb所说的那样,我建议您使用package dotenv,但是另一种方法是创建一个js文件,并在应用服务器的第一行中要求它。

env.js:

process.env.VAR1="Some value"
process.env.VAR2="Another Value"
Run Code Online (Sandbox Code Playgroud)

app.js:

require('env')
console.log(process.env.VAR1) // Some value
Run Code Online (Sandbox Code Playgroud)


Bla*_*g23 8

步骤1:将环境变量添加到其相应文件中。例如,您的暂存环境可以称为.env.staging,其中包含特定于暂存环境的环境变量USER_IDUSER_KEY

步骤2:package.json文件中,添加以下内容:

"scripts": {
  "build": "sh -ac '. ./.env.${REACT_APP_ENV}; react-scripts build'",
  "build:staging": "REACT_APP_ENV=staging npm run build",
  "build:production": "REACT_APP_ENV=production npm run build",
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后像这样在您的部署脚本中调用它:

npm run build:staging
Run Code Online (Sandbox Code Playgroud)

超级简单的设置,就像魅力!

资料来源: https : //medium.com/@tacomanator/environments-with-create-react-app-7b645312c09d

  • @JohnXiao怎么样? (2认同)

Dan*_*cki 7

使用dotenv-webpack让您的生活更轻松。只需安装它,然后在应用程序的根目录中npm install dotenv-webpack --save-dev创建一个文件(记住将其添加到之前)。打开此文件,并在其中设置一些环境变量,例如:.env.gitignoregit push

ENV_VAR_1=1234
ENV_VAR_2=abcd
ENV_VAR_3=1234abcd
Run Code Online (Sandbox Code Playgroud)

现在,在您的 webpack 配置中添加:

const Dotenv = require('dotenv-webpack');
const webpackConfig = {
  node: { global: true, fs: 'empty' }, // Fix: "Uncaught ReferenceError: global is not defined", and "Can't resolve 'fs'".
  output: {
    libraryTarget: 'umd' // Fix: "Uncaught ReferenceError: exports is not defined".
  },
  plugins: [new Dotenv()]
};
module.exports = webpackConfig; // Export all custom Webpack configs.
Run Code Online (Sandbox Code Playgroud)

只需要const Dotenv = require('dotenv-webpack');plugins: [new Dotenv()]、 和 当然。module.exports = webpackConfig; // Export all custom Webpack configs.但是,在某些情况下您可能会遇到一些错误。对于这些,您还可以找到解决方案,并暗示如何修复某些错误。

现在,无论您在哪里,都可以在应用程序中简单地使用process.env.ENV_VAR_1, process.env.ENV_VAR_2, 。process.env.ENV_VAR_3


ash*_*ard 5

对于Windows用户,此Stack Overflow问题和最佳答案对于如何通过命令行设置环境变量非常有用。

如何在Windows中设置NODE_ENV = production?


Tac*_*ter 5

如果您使用的是 mac/linux 并且想要检索您正在使用的机器的本地参数,您将执行以下操作:

  1. 在终端运行中nano ~/.zshrc
  2. 添加一行,例如:export MY_VAR=var
  3. 保存并运行source ~/.zshrc
  4. 在节点中使用如下:console.log(process.env.MY_VAR);

替换.zshrc.bashrc或您的配置文件,具体取决于您使用的 shell(并替换nano为您首选的编辑器)。

  • 这正是我想要的。谢谢 (2认同)