有關NODE_ENV是個啥
不管是在看npm的關於install的文檔, 還是在看怎麼配置webpack時, 又或是看express的文檔, 或者別的什麼, 你可能會看到一個叫NODE_ENV的東西, 好像還可以給其設置不同的值以區分生產環境和開發環境什麼的
如果你是和我一樣, 第一次看到的NODE_ENV, 一定會想這到底是個什麼神奇的變數, 到處都有出現.
經過一陣人肉爬蟲, 我試著來總結一下這玩意兒的相關理念
為什麼說是理念, 私以為, 一切工具或名詞出現的背後都對應著相關的方法論, 正如vue單文件組件所蘊含的高內聚低耦合, 使用token認證實質將狀態的保持從服務端轉向客戶端減輕了伺服器壓力(相較於session), webpack讓模塊化開發的理念得以用在瀏覽器端等等
NODE_ENV是怎麼來的?
將生產和開發環境分開無疑是一個不錯的實踐(比如你是用TS寫的源碼, 在實際應用到生產時已經被編譯成了JS, 源文件毫無用處, 不需要包含進去, 所以生產環境就排除掉TS文件以壓縮體積), 落實到node具體實現也有很多方法
NODE_ENV最早是express(web框架)自己定的一個環境變數, 通過設置不同的值以在生產和開發環境作出相應動作. 隨著該框架的流行, 通過該值的設置區分生產和開發環境變得廣為接受, 很多工具也遵循了該做法
於是當你在看npm的文檔里install這一命令時, 有這麼一段:
With the
--production
flag (or when theNODE_ENV
environment variable is set toproduction
), npm will not install modules listed indevDependencies
.
NODE_ENV是怎麼設置的?
首先, 系統環境變數你應該有印象是個啥, 如果是win10系統, 通過win + s 調出小娜, 然後鍵入env後enter就可以看到.
一般不會將NODE_ENV設置為系統環境變數, 因為這樣設置後是全局的
通常都是局部, 或者說是臨時的設置
- 應用與某個js文件, 比如app.js里加一行, 比如: process.env.NODE_ENV = production
- 應用在某個具體應用, 比如啟動應用時設置: NODE_ENV=production node app.js 方便一點可以寫在package.json里
{ ... "scripts": { "start": "NODE_ENV=production node ./app" } ...}
- 或是在單個的終端會話期間
Windows
set NODE_ENV=production
unix類
export NODE_ENV=production
該命令以後的所有應用啟動時, NODE_ENV 會是 production.
且慢! 第一種設置方法里的process.env是啥?
翻閱node文檔可知這是一個用戶環境信息的對象, 反正文檔是這麼說的, 那讓我們試試
新建一個文件, 填入:
console.log(process.env)
process是全局的, 不需要require
運行
{ ALLUSERSPROFILE: xxx, APPDATA: xxx, CommonProgramFiles: xxx, CommonProgramFiles(x86): xxx, ... LANG: en_US.UTF-8 }
類似這樣, 很多欄位可以在系統環境變數里對應到
顯然process.env包含了我們程序運行時的信息, 設置NODE_ENV只是添加了一個鍵值對, 你也可以自己為自己的應用添加一對別的什麼, 比如process.env.foo = bar, 然後再次查看會發現添加了一段
foo: bar
就是這麼簡單直接
初步認識了一下, 寫完了, 可以去喝口水了??
推薦閱讀: