NODE_ENV跨平臺設定

2Tu發表於2019-03-02
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

參考

cross-env 不起作用怎麼辦?

轉載請標明出處:
http://2tu.github.io/2018/01/18/NODE-ENV-cross/
本文出自Tu`s blog

相關文章