模式(Mode)

提供 mode 配置选项告诉 webpack 相应地使用其内置的优化选项。

字符串

可能的 mode 值包括:nonedevelopmentproduction(默认值)。

用法

只需在配置中提供 mode 选项:

module.exports = {
  mode: 'production'
};

或者将其作为 CLI 参数传递

webpack --mode=production

支持以下字符串值:

选项 描述
development 设置 DefinePlugin 中的 process.env.NODE_ENV 值为 development。启用 NamedChunksPluginNamedModulesPlugin
production 设置 DefinePlugin 中的 process.env.NODE_ENV 值为 production。启用 FlagDependencyUsagePluginFlagIncludedChunksPluginModuleConcatenationPluginNoEmitOnErrorsPluginOccurrenceOrderPluginSideEffectsFlagPluginUglifyJsPlugin
none 未选择任何默认优化选项

如果未设置,webpack 将 production 设为 mode 的默认值。支持的 mode 值有:

请记住,设置 NODE_ENV 并不会自动设置 mode

模式:development

// webpack.development.config.js
module.exports = {
+ mode: 'development'
- devtool: 'eval',
- plugins: [
-   new webpack.NamedModulesPlugin(),
-   new webpack.NamedChunksPlugin(),
-   new webpack.DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("development") }),
- ]
}

模式:production

// webpack.production.config.js
module.exports = {
+  mode: 'production',
-  plugins: [
-    new UglifyJsPlugin(/* ... */),
-    new webpack.DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("production") }),
-    new webpack.optimize.ModuleConcatenationPlugin(),
-    new webpack.NoEmitOnErrorsPlugin()
-  ]
}

模式:none

// webpack.custom.config.js
module.exports = {
+  mode: 'none',
-  plugins: [
-  ]
}

如果想根据 webpack.config.js 中的 mode 属性来改变相应的行为,则必须导出一个函数而不是对象:

var config = {
  entry: './app.js'
  //...
};

module.exports = (env, argv) => {

  if (argv.mode === 'development') {
    config.devtool = 'source-map';
  }

  if (argv.mode === 'production') {
    //...
  }

  return config;
};