2017-07-05 71 views
3

我在我的Mac上使用環境變量來存儲一些敏感憑據,並嘗試通過Node訪問它們。我將他們加入到我的環境概況與節點process.env.VARIABLE_NAME返回undefined

export VARIABLE_NAME=mySensitiveInfo

當我使用echo $VARIABLE_NAME我收到正確的輸出(我的敏感信息)。

但是,當我試圖通過process.env.VARIABLE_NAME訪問節點中的同一個變量並嘗試在控制檯上打印出來時,我得到一個未定義的變量。

儘管如此,其他環境變量看起來還是可以的。例如,當我console.log(process.env.FACEBOOK_CALLBACK_URL)時,它將正確的值打印到我的控制檯。我在前幾天添加了FACEBOOK_CALLBACK_URL

我必須重新啓動機器嗎?節點中的環境變量可用之前需要一段時間嗎?我在SO上看到的最接近的答案是this post,但沒有人能夠弄清楚它爲什麼會發生。

+0

是什麼環境概況? '.bash_profile'? – shaochuancs

+0

你是如何運行Node程序的? –

+0

@JeremyRodi我正在使用Visual Studio Code並使用'nodemon'或'node app.js'來啓動我的程序。 –

回答

5

process.env.VARIABLE_NAME返回undefined,因爲Node.js執行環境還不知道新添加的VARIABLE_NAME。爲了解決這個問題,需要重新啓動Node.js執行環境(例如IDE)。

以下步驟可用於重現此問題:

  1. 打開IDE如WebStorm和寫一個簡單的Node.js程序:console.log(process.env.VARIABLE_NAME)。它會按預期打印undefined,因爲VARIABLE_NAME尚未定義。保持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
+0

這工作完美。只要我關閉了IDE並重新啓動它,它就很好用!謝謝! –

0

我有一個問題,剛纔和我用這個解決它的WebPack配置

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) 
    } 
    }) 
]