设置节点检索的环境变量

我试着跟着教程,上面写着:

有几种方法可以加载凭据。

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

关键字如下:

USER_ID, USER_KEY
< p >…这意味着如果您正确地设置了环境变量,您就可以 不需要在应用程序中管理凭据。

根据一些谷歌搜索,似乎我需要设置process.env?我如何以及在哪里设置这些凭证?示例请。

887491 次浏览

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

使用shell bash的Linux上,你像这样(在控制台中)创建环境变量:

export FOO=bar

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

ubuntu的环境变量

环境变量(在本例中)用于向应用程序传递凭据。USER_IDUSER_KEY都可以分别从process.env.USER_IDprocess.env.USER_KEY访问。你不需要编辑它们,只需要访问它们的内容。

看起来他们只是让你选择从process.env或磁盘上的某个特定文件加载你的USER_IDUSER_KEY

现在,当您运行应用程序时,奇迹发生了。

USER_ID=239482 USER_KEY=foobar node app.js

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

只需在命令行上提供env值

USER_ID='abc' USER_KEY='def' node app.js

对于windows用户来说,这个Stack Overflow问题和顶部答案对于如何通过命令行设置环境变量非常有用

Windows下如何设置NODE_ENV=production ?< / >

如果你想要一个管理选项,试试env npm包。如果设置了环境值,则返回环境值。否则,您可以指定一个默认值,该值存储在全局违约对象变量中(如果不在您的环境中)。

使用.env (" . 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

你应该在你的版本控制存储库中包含.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));

我发现了一个很好的工具。

node-env-file

解析并加载环境文件(包含ENV变量导出)到Node.js环境中,即process.env -使用这种风格:

.env


# some env variables


FOO=foo1
BAR=bar1
BAZ=1
QUX=
# QUUX=

我强烈建议你查查dotenv包。

https://github.com/motdotla/dotenv

它有点类似于@Benxamin回答中建议的库,但它要干净得多,并且不需要任何bash脚本。同样值得注意的是,代码库很受欢迎,维护得很好。

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

FOO=bar
BAZ=bob

然后在你的申请入口文件中尽早输入以下一行:

require('dotenv').config();

繁荣。完成了。的过程。Env '现在将包含上面的变量:

console.log(process.env.FOO);
// bar

”。Env文件不是必需的,所以你不需要担心你的应用程序在它缺席时崩溃。

可以通过process global variable设置环境变量,方法如下:

process.env['NODE_ENV'] = 'production';

适用于所有平台。

我在设置系统环境变量后得到了未定义。当我把APP_VERSION放在用户环境变量中,然后我可以通过process.env.APP_VERSION显示节点的值

windows用户:小心!建议在Unix系统下使用这些命令。但在Windows上,它们不会持续存在,它们只在当前shell中设置了一个变量,当你重新启动时,它就会消失。

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

Windows下设置持久环境变量的3种方法:

A)项目中的.env文件 -最好的方法。因为你可以将该文件复制到任何计算机,并在运行项目时获得相同的配置。

  1. 在你的项目根文件夹中创建一个.env文件,内容为:TEST="hello world"

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

  3. process.env.TEST现在在node中可用

env文件是将api-key排除在代码库之外的一种好方法

B)使用Powershell -这将创建一个可在其他终端访问的变量。但这很糟糕,因为重启电脑后它就会丢失。

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

这种方法在Windows论坛上被广泛推荐,人们似乎没有意识到在系统重新启动后它不会持续....

C)使用Windows GUI

搜索“环境变量”;在“开始菜单搜索”或在“控制面板”中选择“编辑系统环境变量”。打开一个对话框,点击“环境变量”按钮。在对话框的底部打开一个编辑视图,你可以点击&;按钮,添加新的环境变量。一件容易的事。并且即使在重新启动后仍然存在。但您不应该使用它来配置特定的代码库。

作为@ctrlplusb answer的展开,
我建议你也去看看env-dot-prop

它允许你使用dot-pathprocess.env中设置/获取属性。

让我们假设你的process.env包含以下内容:

process.env = {
FOO_BAR: 'baz'
'FOO_🦄': '42'
}

然后你可以像这样操作环境变量:

const envDotProp = require('env-dot-prop');


console.log(process.env);
//=> {FOO_BAR: 'baz', 'FOO_🦄': '42'}


envDotProp.get('foo');
//=> {bar: 'baz', '🦄': '42'}


envDotProp.get('foo.🦄');
//=> '42'


envDotProp.get('foo.🦄', {parse: true});
//=> 42


envDotProp.set('baz.foo', 'bar');
envDotProp.get('', {parse: true});
//=> {foo: {bar: 'baz', '🦄': 42}, baz: {foo: 'bar'}}


console.log(process.env);
//=> {FOO_BAR: 'baz', 'FOO_🦄': '42', BAZ_FOO: 'bar'}


envDotProp.delete('foo');
envDotProp.get('');
//=> {baz: {foo: 'bar'}}


console.log(process.env);
//=> {BAZ_FOO: 'bar'}
这可以帮助你解析环境变量,并将它们作为应用程序中的配置对象使用 它还可以帮助你实现12-factor配置.

. 0

我成功使用过的处理环境变量的好方法如下:

答:(使用不同的配置文件

  1. dev.js //仅包含所有用于开发的环境变量
    文件包含:

    module.exports = {
    ENV: 'dev',
    someEnvKey1 : 'some DEV Value1',
    someEnvKey2 : 'some DEV Value2'
    };
    
  2. stage.js // this has all environment variables for development only

    ..
    
  3. qa.js // this has all environment variables for qa testing only
    The file contains:

    module.exports = {
    ENV: 'dev',
    someEnvKey1 : 'some QA Value1',
    someEnvKey2 : 'some QA Value2'
    };
    

NOTE: the values are changing with the environment, mostly, but keys remain same.

  1. you can have more

  2. z__prod.js // this has all environment variables for production/live only
    NOTE: This file is never bundled for deployment

  3. Put all these config files in /config/ folder

    <projectRoot>/config/dev.js
    <projectRoot>/config/qa.js
    <projectRoot>/config/z__prod.js
    <projectRoot>/setenv.js
    <projectRoot>/setenv.bat
    <projectRoot>/setenv.sh
    

NOTE: The name of prod is different than others, as it would not be used by all.

B. Set the OS/ Lambda/ AzureFunction/ GoogleCloudFunction environment variables from config file

Now ideally, these config variables in file, should go as OS environment variables (or, LAMBDA function variables, or, Azure function variables, Google Cloud Functions, etc.)

so, we write automation in Windows OS (or other)

  1. Assume we write 'setenv' bat file, which takes one argument that is environment that we want to set

  2. Now run "setenv dev"

a) This takes the input from the passed argument variable ('dev' for now)
b) read the corresponding file ('config\dev.js')
c) sets the environment variables in Windows OS (or other)

For example,

The setenv.bat contents might be:

    node setenv.js

setenv.js的内容可能是:

    // import "process.env.ENV".js file (dev.js example)
// loop the imported file contents
//     set the environment variables in Windows OS (or, Lambda, etc.)

这是所有,你的环境已经可以使用了。

当你执行'setenv qa'时,所有的qa环境变量将可以从qa.js中使用,并且可以由相同的程序(总是要求process.env. js)使用。someEnvKey1,但它得到的值是qone)。

希望这能有所帮助。

将环境变量添加到相应的文件中。例如,你的登台环境可以被称为.env.staging,它包含了特定于登台环境的环境变量USER_IDUSER_KEY

在你的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

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

js:

process.env.VAR1="foo"
process.env.VAR2="bar"

app.js:

require('./env') // env.js relative path.
console.log(process.env.VAR1) // foo

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

ENV_VAR_1=1234
ENV_VAR_2=abcd
ENV_VAR_3=1234abcd

现在,在你的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.

只有const Dotenv = require('dotenv-webpack');plugins: [new Dotenv()],当然还有module.exports = webpackConfig; // Export all custom Webpack configs.是必需的。然而,在某些情况下,您可能会得到一些错误。对于这些问题,你也有解决方案,这意味着你可以修复某些错误。

现在,无论你想在哪里,你都可以在你的应用程序中使用process.env.ENV_VAR_1process.env.ENV_VAR_2process.env.ENV_VAR_3

如果你使用的是mac/linux,你想检索你正在使用的机器的本地参数,这是你要做的:

  1. 在终端运行纳米~ / . bash_profile
  2. 添加如下一行:出口MY_VAR = var
  3. 保存,运行源~ / . bash_profile
  4. console.log(process.env.MY_VAR);

如果你正在使用visual studio代码调试功能,你可以添加"envFile": "${workspaceRoot}/.env"来启动配置。这样你就不用用dotenv了。

{
"cwd": "${workspaceRoot}",
"command": "npm start",
"name": "Run be",
"request": "launch",
"type": "node-terminal",
"envFile": "${workspaceRoot}/.env"
},

使用cross-env。这会让你免去很多头疼的事情

npm i -S cross-env

cross-env PARAM=value node ./index.js

这通常适用于非凭证。比如证书和钥匙 最好不要存储硬编码的用户id和密码,而是使用不在repo和dotenv

中的.env文件

很像其他一些答案,但没有任何lib或(bash) export

我有一些加密的变量,然后我需要在飞行中生成它们。

神奇的事情发生在set -a && ... && set +a上,它可以是一些内容或文件。

#!/bin/sh


set -a
SOMEVAR_A="abcd"
SOMEVAR_B="efgh"
SOMEVAR_C=123456
set +a


# or
set -a && . ./file && set +a

我有一个docker-entrypoint.sh与:

#!/bin/sh


node app/config/set-environment.js


ENVFILE=/tmp/.env


if [[ ! -f "$ENVFILE" ]] ; then
echo "File $ENVFILE is not there, aborting."
exit
fi


# here is where things happen
set -a && . $ENVFILE && set +a


if [ "${NODE_ENV}" = "development" ]; then
npx nodemon app/server.js
else
node app/server.js
fi


exec "$@"

set-environment.js生成一个(tmp) .env文件

创建一个名为local-env的文件,并用变量填充它

PORT=80
DB_NAME=foo
SOME_URL=example.com

现在这样运行node:

source ./local_env ; node index.js