使用mode和webpack.EnvironmentPlugin是否冗余?

Pol*_*her 5 webpack webpack-4

试图了解webpack.EnvironmentPlugin正在为我做什么。

使用modewebpack.EnvironmentPlugin冗余?

module.exports = merge(webpackCommonConfig, {
  mode: 'development',
  ...
  plugins: [
    new webpack.EnvironmentPlugin({ NODE_ENV: 'development' }),
  ],
  ...
});
Run Code Online (Sandbox Code Playgroud)

TLDR:仅此示例的简短答案:是的,它是多余的。

长答案:除了说模式正在更改NODE_ENV的env var外,还有很多事情要做。尽管从表面上看,它似乎new webpack.EnvironmentPlugin({ NODE_ENV: 'development' })只是在运行,而是在运行。

Leg*_*nds 7

是的,仅针对此特定用例!

TL; DR;

--mode development自动设置: process.env.NODE_ENV为值development

--mode production自动设置: process.env.NODE_ENV为值production

您无需添加以下插件: new webpack.EnvironmentPlugin({ NODE_ENV: 'development' }),

这是唯一多余的设置,因为NODE_ENV: 'development|production'在使用--mode!时会自动设置。

如果未设置--mode,它将自动默认为production

继续阅读,以了解为什么--mode实际上并不是多余的,以及它实际上是做什么的:


如果设置--modeproduction或,实际上会发生什么development

模式:发展

设置process.env.NODE_ENV为value development

启用:
NamedChunksPlugin
NamedModulesPlugin

模式:生产

设置process.env.NODE_ENV为value production

启用:
FlagDependencyUsagePlugin
FlagIncludedChunksPlugin
ModuleConcatenationPlugin
NoEmitOnErrorsPluginOccurrenceOrderPlugin
SideEffectsFlagPlugin
UglifyJsPlugin

--mode将不同的插件添加到编译过程中,具体取决于为其设置了哪个值mode

>>参考

请记住,设置NODE_ENV不会自动设置模式