踩坑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也是可以解決問題的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM