踩坑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也是可以解决问题的

 

posted @ 2022-04-15 18:15  tuna-  阅读(5437)  评论(0编辑  收藏  举报