web-dev-qa-db-ja.com

Node process.env.VARIABLE_NAMEは未定義を返します

Macで環境変数を使用して機密情報を保存し、Nodeを介してそれらにアクセスしようとしています。環境プロファイルにそれらを追加しました

_export VARIABLE_NAME=mySensitiveInfo_

_echo $VARIABLE_NAME_を使用すると、正しい出力を受け取ります(機密情報)。

ただし、この同じ変数にNode with _process.env.VARIABLE_NAME_でアクセスして、コンソールに出力しようとすると、未定義になります。

ただし、他の環境変数は問題ないようです。たとえば、I console.log(process.env.FACEBOOK_CALLBACK_URL)の場合、正しい値がコンソールに出力されます。数日前にFACEBOOK_CALLBACK_URLを追加しました。

マシンなどを再起動する必要がありますか? Nodeで環境変数が使用可能になるまでに一定の時間がかかりますか? SO)で見た最も近い答えは この投稿 ですが、なぜそれが起こっているのか誰も理解できませんでした。

18
Yu Chen

Node.js実行環境は新しく追加されたprocess.env.VARIABLE_NAMEをまだ知らないため、VARIABLE_NAMEundefinedを返します。この問題を修正するには、Node.js実行環境(IDEなど)を再起動する必要があります。

次の手順を使用して、この問題を再現できます。

  1. WebStormなどのIDEを開き、単純なNode.jsプログラムを作成します:console.log(process.env.VARIABLE_NAME)VARIABLE_NAMEはまだ定義されていないため、期待どおりundefinedを出力します。 IDEを実行したままにして、閉じないでください。
  2. .bash_profileなどの環境プロファイルを開き、export VARIABLE_NAME=mySensitiveInfoを追加します。
  3. システムコンソールを開いてsource .bash_profileを実行すると、上記のexportステートメントが実行されます。これ以降、システムコンソールが開かれるたびに、VARIABLE_NAME環境変数が存在します。
  4. システムコンソールで、ステップ1でNode.jsプログラムを実行すると、mySensitiveInfoが出力されます。
  5. IDEに切り替えてNode.jsプログラムを実行すると、undefinedが出力されます。
  6. IDEを再起動してNode.jsプログラムを実行します。今回はmySensitiveInfoを出力します
18
shaochuancs

私は今問題を抱えており、これを使用してwebpack configで解決しました

const plugins = [
    new webpack.NoEmitOnErrorsPlugin(),
    // after compile global will defined `process.env` this Object
    new webpack.DefinePlugin({
      BUILD_AT : Date.now().toString(32),
      DEBUG: process.env.NODE_ENV !== 'production',
          'process.env': {
              'NODE_ENV': JSON.stringify(process.env.NODE_ENV || "development"),
              'VARIABLE_NAME': JSON.stringify(process.env.VARIABLE_NAME)
     }
   })
]
1
kingzez