使用 mode 和 webpack.EnvironmentPlugin 是多余的吗?

Is using mode and webpack.EnvironmentPlugin redundant?

试图了解 webpack.EnvironmentPlugin 对我有什么帮助。

使用 modewebpack.EnvironmentPlugin 是多余的吗?

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

TLDR: 仅此示例的简短回答:是的,这是多余的。

长答案:除了说模式正在改变 NODE_ENV 的环境变量之外,还有很多事情要做。虽然从表面上看 new webpack.EnvironmentPlugin({ NODE_ENV: 'development' }) 只是在运行时这样做。

仅适用于此特定用例!

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 实际上不是多余的,以及它在幕后的实际作用:


如果将 --mode 设置为 productiondevelopment:

,实际会发生什么

模式:开发

Sets process.env.NODE_ENV to value development.

Enables:
NamedChunksPlugin
and NamedModulesPlugin.

模式:生产

Sets process.env.NODE_ENV to value production.

Enables:
FlagDependencyUsagePlugin,
FlagIncludedChunksPlugin,
ModuleConcatenationPlugin,
NoEmitOnErrorsPlugin, OccurrenceOrderPlugin,
SideEffectsFlagPlugin
and UglifyJsPlugin.

--mode在编译过程中添加不同的插件,取决于为mode设置的值。

>> Reference

Please remember that setting NODE_ENV doesn't automatically set mode