一個會懷疑人生的 bug。
簡述
在講 bug 之前先幫你複習一下 NODE_ENV
的用法:
- 到 package.json 設定 script
1 | { |
- 到對應的檔案裡面寫 JS
1 | // index.js |
- 最後用 npm run 的方式來執行(只有透過這種方式才能存取到寫在 script 中的環境變數)
1 | npm run start |
輸出結果:
1 | my NODE_ENV: hello |
看起來很合理,但這時候如果你這樣寫:
1 | console.log('is equal: ', process.env.NODE_ENV === 'hello'); // true / false ? |
我本來也想說不就 true
嗎?內容一樣,型別也正確,有什麼好 false
的?
但是,結果確實是 false
。
揭開幕後
就直接說吧,其實是因為「空白字元」的關係:
1 | { |
你可以試著用 JSON.stringify
印出來看就知道原因了:
1 | NODE_END: "hello " // <- 結尾多一個空格 |
所以結論就是空白字元的關係才導致 false
的,把空格拿掉就正常了:
1 | { |
1 | console.log('NODE_END: ', JSON.stringify(process.env.NODE_ENV)); |
輸出結果:
1 | NODE_END: "hello" |
所以以後在用這種東西時,最好確保 &&
前後沒出現空白字元,不然就會像我一樣被雷的不要不要的。