set NODE_ENV問題
最近接手系統中採用React作為管理端,其中有這樣一句
"build": "node ./tools/gulpfile.js&&set NODE_ENV=__PROD__&&node ./tools/webpack.config.js"
複製程式碼
其中“set NODE_ENV=PROD”卻未在我的Mac下生效,其他成員使用Windows。
原因是Windows下使用set NODE_ENV=xx,Unix下應該為export NODE_ENV=xx,於是不得不區分作業系統進行設定,於是就有了cross-env這個方案。
使用cross-env解決跨平臺
修改命令為
"build": "node ./tools/gulpfile.js&&cross-env NODE_ENV=__PROD__&&node ./tools/webpack.config.js"
複製程式碼
執行後,結果還是TMD沒生效。檢視cross-env的Usage後,區別在於我使用了&&分隔,在後面的webpack.config.js中獲取前面設定的NODE_ENV,問題是否出在這裡呢?
&&與空格問題
感謝justjavac提供支援
&&為shell邏輯與運算子
格式
command1 && command2 [&& command3 …]
command1執行成功才會執行command2,任意命令執行失敗則不會再執行後面的命令
shell執行命令可以(;、&&、||)間隔
正確使用 cross-env vs cross-evn-shell
cross-env
"build": "node ./tools/gulpfile.js&&cross-env NODE_ENV=__PROD__ node ./tools/webpack.config.js"
複製程式碼
cross-env-shell
"build": "node ./tools/gulpfile.js&&cross-env-shell NODE_ENV=__PROD__ "node ./tools/webpack.config.js && echo $NODE_ENV""
複製程式碼
“”包裹中的內容都可以有效取到cross-env-shell設定的環境變數,這裡面的原理在於Node本身的跨平臺機制spawn