目标

Webpack 可以为多个环境或目标编译。要详细了解目标是什么,请阅读目标概念页面

目标

字符串 [字符串] false

指示 webpack 为特定环境生成运行时代码。请注意,webpack 运行时代码与您编写的用户代码不同,如果您想针对特定环境,则应使用 Babel 等转译器来转译这些代码,例如,您的源代码中包含箭头函数,并且您想在 ES5 环境中运行捆绑的代码。Webpack 不会使用配置的目标自动转译它们。

默认值为'browserslist',如果未找到 browserslist 配置,则默认为'web'

字符串

以下字符串值通过WebpackOptionsApply支持

选项描述
async-node[[X].Y]为在类似 Node.js 的环境中使用编译(使用fsvm异步加载块)
electron[[X].Y]-mainElectron的主进程编译。
electron[[X].Y]-rendererElectron的渲染器进程编译,提供一个使用JsonpTemplatePluginFunctionModulePlugin用于浏览器环境以及NodeTargetPluginExternalsPlugin用于 CommonJS 和 Electron 内置模块的目标。
electron[[X].Y]-preloadElectron的渲染器进程编译,提供一个使用NodeTemplatePlugin(其中asyncChunkLoading设置为true)、FunctionModulePlugin用于浏览器环境以及NodeTargetPluginExternalsPlugin用于 CommonJS 和 Electron 内置模块的目标。
node[[X].Y]编译为在类似 Node.js 的环境中使用(使用 Node.js require 加载块)
node-webkit[[X].Y]编译为在 WebKit 中使用,并使用 JSONP 加载块。允许导入内置的 Node.js 模块和 nw.gui(实验性)
nwjs[[X].Y]node-webkit 相同
web编译为在类似浏览器的环境中使用 (默认)
webworker编译为 WebWorker
esX编译为指定的 ECMAScript 版本。例如:es5、es2020。
browserslist从 browserslist 配置中推断平台和 ES 功能 (如果 browserslist 配置可用,则为默认值)

例如,当 target 设置为 "electron-main" 时,webpack 会包含多个特定于 electron 的变量。

可选地可以指定 nodeelectron 的版本。这在上面的表格中用 [[X].Y] 表示。

webpack.config.js

module.exports = {
  // ...
  target: 'node12.18',
};

它有助于确定可用于生成运行时代码的 ES 功能(所有块和模块都由运行时代码包装)。

browserslist

如果项目有 browserslist 配置,那么 webpack 将使用它来

  • 确定可用于生成运行时代码的 ES 功能。
  • 推断环境(例如:last 2 node versionstarget: "node" 相同,但有一些 output.environment 设置)。

支持的 browserslist 值

  • browserslist - 自动使用解析的 browserslist 配置和环境(来自最近的 package.jsonBROWSERSLIST 环境变量,有关详细信息,请参见 browserslist 文档
  • browserslist:modern - 使用来自自动解析的 browserslist 配置的 modern 环境
  • browserslist:last 2 versions - 使用显式 browserslist 查询(配置将被忽略)
  • browserslist:/path/to/config - 显式指定 browserslist 配置
  • browserslist:/path/to/config:modern - 显式指定 browserslist 配置和环境

[string]

当传递多个目标时,将使用功能的公共子集

webpack.config.js

module.exports = {
  // ...
  target: ['web', 'es5'],
};

Webpack 将为 web 平台生成运行时代码,并将仅使用 ES5 功能。

目前并非所有目标都可以混合使用。

webpack.config.js

module.exports = {
  // ...
  target: ['web', 'node'],
};

将导致错误。Webpack 目前不支持通用目标。

false

如果上述列表中没有预定义的目标符合您的需求,请将target设置为false,将不会应用任何插件。

webpack.config.js

module.exports = {
  // ...
  target: false,
};

或者您可以应用您想要的特定插件

webpack.config.js

const webpack = require('webpack');

module.exports = {
  // ...
  target: false,
  plugins: [
    new webpack.web.JsonpTemplatePlugin(options.output),
    new webpack.LoaderTargetPlugin('web'),
  ],
};

当没有提供有关目标或环境功能的信息时,将使用 ES2015。

10 位贡献者

juanglsokraskipjackSpaceK33zpastelskytbroadleybyzykEugeneHlushkosmelukovchenxsan