1. 程式人生 > 其它 >踩坑Conflicting values for 'process.env.NODE_ENV'

踩坑Conflicting values for 'process.env.NODE_ENV'

上個季度升級了webpack5。本以為一切都沒問題了。今天偶爾發現一個遺留問題:上回設定的process.env.NODE_ENV不對。

按專案需求,業務需要區分多套環境,因此在各環境需要通過rewrite.config.json改寫process.env.NODE_ENV的值,比如設定為“pre”,“prd”。一貫也是這樣做的,但上次升級webpack5後,process.env.NODE_ENV預設被設定為“production”,導致一些業務出現了問題。

 

因此計劃用DefinePlugin重新設定NODE_ENV。但結果卻報錯 WARNING in DefinePlugin  Conflicting values for 'process.env.NODE_ENV' 

經過查詢資料,發現可能原因有二

1.是因為package.json的scripts中,start和build命令都預設了NODE_ENV的值,不再支援修改

2.optimization.nodeEnv 在不設定時(一般都不會設定),預設讀取mode的值(預設是production或development),DefinePlugin重新設定時與mode不一致,導致衝突

總的來說,都是【有預設值,不再支援修改】

 

於是我不再使用DefinePlugin外掛(我的專案中,這個外掛只有這個作用,因此可以遮蔽),而是在optimization.nodeEnv中設定各環境需要的值。問題解決

optimization: {
  nodeEnv: isEnvProduction 
? '{{PROD_ENV}}' : 'local'   // ...其他配置 } //{{PROD_ENV}} 在後面步驟中會被rewrite.config.json替換

 

ps:猜想改mode也是可以解決問題的