web-dev-qa-db-ja.com

取得するノードの環境変数の設定

私はチュートリアルに従おうとしています、そしてそれは言います:

「資格情報を読み込む方法はいくつかあります。

  1. 環境変数からロード
  2. ディスク上のJSONファイルからロード

キーは次のとおりです。

USER_ID, USER_KEY

...これは、環境変数を正しく設定すれば、アプリケーションで資格情報を管理する必要がまったくないことを意味します。」

いくつかのグーグルに基づいて、私はprocess.envに変数を設定する必要があるようです。これらの資格情報を設定する方法と場所はどこですか。例ください。

349
user1107173

環境変数(この場合)は、資格情報をアプリケーションに渡すために使用されています。 USER_IDUSER_KEYは、両方ともそれぞれprocess.env.USER_IDprocess.env.USER_KEYからアクセスできます。編集する必要はありません。内容にアクセスするだけです。

USER_IDまたはUSER_KEYまたはディスク上の特定のファイルのどちらからprocess.envUSER_ID=239482 USER_KEY=foobar node app.jsをロードするかを選択できるだけのようです。

さて、あなたがアプリケーションを実行するとき、魔法が起こります。

__コード__

これはユーザーID 239482とユーザーキーをfoobarとして渡します。これはテストには適していますが、実稼働環境では、おそらく変数をエクスポートするためにいくつかのbashスクリプトを構成することになります。

343
SamT

Dotenvパッケージを調べることを強くお勧めします。

https://github.com/motdotla/dotenv

これは@Benxaminからの回答内で提案されているライブラリに似ていますが、はるかにクリーンで、bashスクリプトを必要としません。また、コードベースが広く使用されており、よくメンテナンスされていることにも注目してください。

基本的にあなたは.envファイルを必要とします(あなたのgit/Mercurial/etcから無視されることを強くお勧めします):

FOO=bar
BAZ=bob

それから、あなたのアプリケーションエントリファイルに次の行をできるだけ早く入れてください。

require('dotenv').config();

ブーム。完了しました。 'process.env'は上記の変数を含みます。

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

'.env'ファイルは必須ではないので、アプリケーションが存在しなくてもアプリケーションが倒れることを心配する必要はありません。

167
ctrlplusb

コマンドラインでenv値を指定するだけです

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

次のようにプロセスグローバル変数を通じて環境変数を設定できます。

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

すべてのプラットフォームで動作します。

62
jsbisht

管理オプションが必要な場合は、envs npmパッケージを試してください。設定されている場合は環境値を返します。それ以外の場合は、グローバルdefaultsオブジェクト変数に格納されているデフォルト値が自分の環境にない場合は、それを指定できます。

.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

.envをバージョン管理リポジトリにnot含める必要があります(それを.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));
49
Benxamin

それはあなたのオペレーティングシステムとあなたのシェルに依存します

シェルバッシュを含むlinuxでは、(コンソールで)次のような環境変数を作成します。

export FOO=bar

Ubuntuの環境変数についての詳細は(例えば):

ubuntuの環境変数

30
leszek.hanusz

Ctrlplusbが言ったように、packege dotenvを使用することをお勧めしますが、これを行うもう1つの方法はjsファイルを作成し、それをアプリケーションサーバーの最初の行に要求することです。

env.js:

process.env.VAR1="Some value"
process.env.VAR2="Another Value"

app.js:

require('env')
console.log(process.env.VAR1) // Some Value
6
dpolicastro

ステップ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",
  ...
}

それから、このようにdeployスクリプトでそれを呼び出します。

npm run build:staging

超シンプルなセットアップと魅力のように動作します!

出典: https://medium.com/@tacomanator/environments-with-create-react-app-7b645312c09d

6
Blairg23

Windowsユーザー:注意してください!これらのコマンドはUnixに推奨されますが、Windowsでは一時的なものにすぎません。マシンを再起動するか、新しいターミナルシェルを起動するとすぐに、現在のシェルのみに変数が設定されます。

  • 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

Env-filesは、コードベースに持ちたくないAPIキーやその他の秘密を保持するのに適しています。必ず.gitignoreに追加してください。

B)Powershellを使用-これにより、他の端末でアクセス可能な変数が作成されます。ただし、コンピューターを再起動すると、変数が失われることに注意してください。

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

この方法はWindowsフォーラムで広く推奨されていますが、システムの再起動後、変数が持続しないことを人々が認識しているとは思いません。

C)Windows GUIを使用します-これはコマンドほどクールではありませんが、少なくとも機能し、永続化変数を作成します。

  1. [スタート]メニューの検索またはコントロールパネルで「環境変数」を検索します。
  2. 「システム環境変数の編集」を選択します
  3. ダイアログが開きます。ダイアログの下部にある「環境変数」ボタンをクリックします。
  4. これで、変数を編集するための小さなウィンドウができました。 「新規」ボタンをクリックして、新しい環境変数を追加します。簡単です。
4
Drkawashima

Windowsユーザーにとって、このStack Overflowの質問とトップアンサーは、コマンドラインから環境変数を設定する方法について非常に役に立ちます。

WindowsでNODE_ENV = productionを設定するにはどうすればいいですか?

4
asherrard

これを行うためのNiceツールに出会いました。

ノード環境ファイル

環境ファイル(ENV変数エクスポートを含む)を解析してNode.js環境にロードします。つまり、process.env - このスタイルを使用します。

.env

# some env variables

FOO=foo1
BAR=bar1
BAZ=1
QUX=
# QUUX=
4
Sean McClory

@ctrlplusbの解答として、
env-dot-prop パッケージも見てみることをお勧めします。

process.env を使用してdot-pathからプロパティを設定/取得することができます。

あなたの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要素構成を実装するのにも役立ちます

2
simonepri

私がうまく使った環境変数を作るためのとても良い方法は以下の通りです:

A. 異なる設定ファイルがあります

  1. dev.js //これには開発用のすべての環境変数が含まれています
    ファイルに含まれるもの:

    module.exports = {
     ENV: 'dev',
     someEnvKey1 : 'some DEV Value1',
     someEnvKey2 : 'some DEV Value2'
    };
    
  2. stage.js //これには開発専用のすべての環境変数があります

    ..
    
  3. qa.js //これはqaテスト専用の環境変数をすべて持っている
    ファイルに含まれるもの:

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

_ note _ :値は環境とともに変化しますが、キーは変わりません。

  1. あなたはもっと持つことができます

  2. z__prod.js //これにはプロダクション/ライブ専用のすべての環境変数があります
    注:このファイルはデプロイメント用にバンドルされていません。

  3. これらすべての設定ファイルを/ config /フォルダに置きます。

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

_ note _ :prodの名前は他のものとは異なります。すべての人に使われるわけではないからです。

B. 設定ファイルからOS/Lambda/AzureFunction/GoogleCloudFunction環境変数を設定する

理想的には、ファイル内のこれらの構成変数は、OS環境変数(または、LAMBDA関数変数、またはAzure関数変数、Google Cloud Functionsなど)として指定する必要があります。

そのため、Windows OS(またはその他)で自動化を作成します。

  1. ' setenv ' batファイルを作成するとします。これは、設定したい環境である1つの引数を取ります。

  2. 今 " setenv dev "を実行してください。

a)これは渡された引数変数(今のところ 'dev')から入力を取ります。
b)対応するファイルを読みます( 'config\dev.js')
c)Windows OS(またはその他)の環境変数を設定します

例えば、

Setenv.batの内容は次のとおりです。

    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.someEnvKey1が要求されますが、取得される値はqa one).

それが役立つことを願っています。

dotenv-webpack で生活を楽にします。 npm install dotenv-webpack --save-devをインストールしてから、アプリケーションのルートに.envファイルを作成します(.gitignoreの前にgit Pushに追加してください)。このファイルを開き、次のような環境変数を設定します。

ENV_VAR_1=1234
ENV_VAR_2=abcd
ENV_VAR_3=1234abcd

次に、webpack configに以下を追加します。

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を簡単に使用できます。

0

システム環境変数を設定した後、未定義になりました。 APP_VERSIONをUser env varに入れると、process.env.APP_VERSIONを介してノードから値を表示できます。

0
omencat