我试图跟随一个教程,它说:
有几种加载凭据的方法。
- 从环境变量加载,
- 从磁盘上的JSON文件加载。
键需要如下设置:
USER_ID, USER_KEY
这意味着,如果您正确设置了环境变量,您就无需在应用程序中管理凭据。
我试图跟随一个教程,它说:
有几种加载凭据的方法。
- 从环境变量加载,
- 从磁盘上的JSON文件加载。
键需要如下设置:
USER_ID, USER_KEY
这意味着,如果您正确设置了环境变量,您就无需在应用程序中管理凭据。
在这种情况下,环境变量被用于将凭证传递给您的应用程序。可以分别从process.env.USER_ID
和process.env.USER_KEY
访问USER_ID
和USER_KEY
。您无需编辑它们,只需访问其内容。
看起来他们只是在让你选择从process.env
或磁盘上指定的文件中加载USER_ID
和USER_KEY
。
现在,当您运行应用程序时,魔法就会发生。
USER_ID=239482 USER_KEY=foobar node app.js
那将传递用户ID 239482
和用户密钥为foobar
。这适用于测试,但对于生产,您可能要配置一些bash脚本以导出变量。
我强烈推荐使用dotenv包。
https://github.com/motdotla/dotenv
它有点类似于@Benxamin所建议的库,但更加简洁,不需要任何bash脚本。另外值得一提的是,该代码库非常流行且维护良好。
基本上你需要一个.env文件(我强烈建议从你的git/mercurial等版本控制中忽略它):
FOO=bar
BAZ=bob
然后在你的应用程序入口文件中,尽早添加以下行:
require('dotenv').config();
完成。'process.env'现在将包含上述变量:
console.log(process.env.FOO);
// bar
“.env”文件不是必需的,因此您无需担心应用程序在其缺失时崩溃。
您可以通过进程全局变量设置环境变量,方法如下:
process.env['NODE_ENV'] = 'production';
适用于所有平台。
只需在命令行中提供环境值
USER_ID='abc' USER_KEY='def' node app.js
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
您应该 不要 将 .env
文件包含在版本控制存储库中(将其添加到您的 .gitignore
文件中)。
为了将 .env
文件中的变量传递到您的环境中,您可以使用一个bash脚本,在启动应用程序之前执行与 export NODE_ENV=development
等效的操作。
#!/bin/bash
while read line; do export "$line";
done <source .env
然后将以下内容放入您的应用程序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));
这取决于您的操作系统和 shell。
在带有 bash shell 的 Linux 上,您可以通过以下方式创建环境变量(在控制台中):
export FOO=bar
了解 Ubuntu 上的环境变量(例如)的更多信息,请访问以下链接:Ubuntu 上的环境变量
npm install --save geo-ip
,需要一个环境 key=value 设置才能使安装工作。 - Scott Fleming警告:Windows 用户请注意!这些命令是针对 Unix 推荐的。但在 Windows 上,它们不会持久化,它们只会在当前 shell 中设置一个变量,并且在重新启动后就会消失。
SET TEST="hello world"
$env:TEST = "hello world"
在 Windows 上设置持久性环境变量的三种方法:
A) 项目中的 .env 文件 - 最佳方法。因为你只需将该文件复制到任何计算机上,在运行项目时即可获得相同的配置。
在项目文件夹根目录中创建一个 .env
文件,其内容为:TEST="hello world"
编写一些读取该文件的 Node 代码。建议安装 dotenv(npm install dotenv --save
),然后在 Node 设置代码中添加 require('dotenv').config();
。
现在可以在 Node 中使用 process.env.TEST
Env 文件是将 API 密钥保留在代码库之外的好方法
B) 使用 PowerShell - 这将创建一个在其他终端中可访问的变量。但它很糟糕,因为它将在重新启动计算机后丢失。
[Environment]::SetEnvironmentVariable("TEST", "hello world", "User")
这种方法在 Windows 论坛中被广泛推荐,但人们似乎不知道它在系统重启后不会保留……
C) 使用 Windows GUI
在开始菜单搜索或控制面板中搜索“环境变量”,选择“编辑系统环境变量”。会打开一个对话框,您需要在对话框底部单击“环境变量”按钮,以打开一个编辑视图,在其中您可以单击“新建”按钮以添加新的环境变量。很容易操作。即使重启后也会保持不变。但这并不是您应该用来配置特定代码库的东西。像ctrlplusb所说,我建议你使用dotenv
包,但另一种方法是创建一个js文件,并在应用服务器的第一行中要求它。
env.js:
process.env.VAR1="foo"
process.env.VAR2="bar"
应用程序的js文件:
require('./env') // env.js relative path.
console.log(process.env.VAR1) // foo
require('./env')
。 - canbax步骤1:将您的环境变量添加到相应的文件中。例如,您的暂存环境可以被称为.env.staging
,其中包含针对您的暂存环境特定的USER_ID
和USER_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",
...
}
然后在您的部署脚本中像这样调用它:
npm run build:staging
设置超级简单,使用起来很顺畅!
来源:https://medium.com/@tacomanator/environments-with-create-react-app-7b645312c09d
使用dotenv-webpack让您的生活更轻松。只需安装npm install dotenv-webpack --save-dev
,然后在应用程序根目录下创建一个.env
文件(在git push
之前请记得添加到.gitignore
)。打开这个文件,在里面设置一些环境变量,例如:
ENV_VAR_1=1234
ENV_VAR_2=abcd
ENV_VAR_3=1234abcd
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.
只需使用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
。
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。 - SilentSteelenv DEBUG=* node some_file.js
- divillysausagesdotenv
的作用,它会读取你的.env
文件并应用它。 - balexandre