use*_*173 386 environment-variables node.js
我正在尝试按照教程说它:
"有几种方法可以加载凭据.
密钥需要如下:
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脚本来导出变量.
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'文件不是必需的,因此您无需担心您的应用程序在不存在时会丢失.
pal*_*nik 96
只需在命令行上提供env值
USER_ID='abc' USER_KEY='def' node app.js
Run Code Online (Sandbox Code Playgroud)
jsb*_*sht 72
您可以通过进程全局变量设置环境变量,如下所示:
process.env['NODE_ENV'] = 'production';
Run Code Online (Sandbox Code Playgroud)
适用于所有平台.
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)
les*_*usz 34
这取决于您的操作系统和shell
在带有shell bash的linux上,你可以创建这样的环境变量(在控制台中):
export FOO=bar
Run Code Online (Sandbox Code Playgroud)
有关ubuntu上的环境变量的更多信息(例如):
Drk*_*ima 19
Windows 用户:注意!建议在 Unix 上使用这些命令,但在 Windows 上它们只是临时的。它们仅为当前 shell 设置一个变量,只要您重新启动机器或启动新的终端 shell,它们就会消失。
SET TEST="hello world"
$env:TEST = "hello world"
要在 Windows 上设置持久环境变量,您必须改用以下方法之一:
A) 项目中的 .env 文件- 这是最好的方法,因为这意味着您可以将项目移动到其他系统,而无需在该系统上设置环境变量,然后才能运行代码。
.env
在您的项目文件夹根目录中创建一个包含以下内容的文件:TEST="hello world"
编写一些将读取该文件的节点代码。我建议安装 dotenv ( npm install dotenv --save
) 然后require('dotenv').config();
在你的节点设置代码中添加。
process.env.TEST
环境文件可以很好地保存您不想在代码库中包含的 api 密钥和其他秘密。只需确保将其添加到您的.gitignore
.
B) 使用 Powershell - 这将创建一个可以在其他终端中访问的变量。但请注意,重新启动计算机后该变量将丢失。
[Environment]::SetEnvironmentVariable("TEST", "hello world", "User")
这种方法在 Windows 论坛上被广泛推荐,但我认为人们没有意识到系统重启后变量不会持续存在......
C) 使用 Windows GUI
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)
步骤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",
...
}
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
使用dotenv-webpack让您的生活更轻松。只需安装它,然后在应用程序的根目录中npm install dotenv-webpack --save-dev
创建一个文件(记住将其添加到之前)。打开此文件,并在其中设置一些环境变量,例如:.env
.gitignore
git 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
如果您使用的是 mac/linux 并且想要检索您正在使用的机器的本地参数,您将执行以下操作:
nano ~/.zshrc
export MY_VAR=var
source ~/.zshrc
console.log(process.env.MY_VAR);
替换.zshrc
为.bashrc
或您的配置文件,具体取决于您使用的 shell(并替换nano
为您首选的编辑器)。
归档时间: |
|
查看次数: |
577837 次 |
最近记录: |