webpack 能够为多种环境或 target 构建编译。想要理解什么是 target
的详细信息,
请阅读 target 概念页面。
string
[string]
false
告知 webpack 为目标(target)指定一个环境。默认值为 "browserslist"
,如果没有找到 browserslist 的配置,则默认为 "web"
通过 WebpackOptionsApply
,
可以支持以下字符串值:
选项 | 描述 |
---|---|
async-node | 编译为类 Node.js 环境可用(使用 fs 和 vm 异步加载分块) |
electron-main | 编译为 Electron 主进程。 |
electron-renderer | 编译为 Electron 渲染进程,使用 JsonpTemplatePlugin , |
FunctionModulePlugin 来为浏览器环境提供目标,使用 NodeTargetPlugin 和 ExternalsPlugin | |
为 CommonJS 和 Electron 内置模块提供目标。 | |
electron-preload | 编译为 Electron 渲染进程, |
使用 NodeTemplatePlugin 且 asyncChunkLoading 设置为 true ,FunctionModulePlugin 来为浏览器提供目标,使用 NodeTargetPlugin 和 ExternalsPlugin 为 CommonJS 和 Electron 内置模块提供目标。 | |
node | 编译为类 Node.js 环境可用(使用 Node.js require 加载 chunks) |
node-webkit | 编译为 Webkit 可用,并且使用 jsonp 去加载分块。支持 Node.js 内置模块和 nw.gui |
导入(实验性质) | |
nwjs[[X].Y] | 等价于 node-webkit |
web | 编译为类浏览器环境里可用 (默认) |
webworker | 编译成一个 WebWorker |
esX | 编译为指定版本的 ECMAScript。例如,es5,es2020 |
browserslist | 从 browserslist-config 中推断出平台和 ES 特性 (如果 browserslist 可用,其值则为默认) |
例如,当 target
设置为 "electron-main"
,webpack 引入多个 electron 特定的变量。
可指定 node
或者 electron
的版本。上表中使用 [[X].Y]
表示。
webpack.config.js
module.exports = {
// ...
target: 'node12.18',
};
它有助于确定可能用于生成运行时代码的 ES 特性(所有的 chunk 和模块都被运行时代码所包裹)
如果一个项目有 browserslist 配置,那么 webpack 将会使用它:
last 2 node versions
等价于 target: node
,并会进行一些 output.environment
设置).支持的 browserslist 值:
browserslist
- 使用自动解析的 browserslist 配置和环境(从最近的 package.json
或 BROWSERSLIST
环境变量中获取,具体请查阅 browserslist 文档)browserslist:modern
- 使用自动解析的 browserslist 配置中的 modern
环境browserslist:last 2 versions
- 使用显式 browserslist 查询(配置将被忽略)browserslist:/path/to/config
- 明确指定 browserslist 配置路径browserslist:/path/to/config:modern
- 明确指定 browserslist 的配置路径和环境当传递多个目标时,将使用共同的特性子集:
webpack.config.js
module.exports = {
// ...
target: ['web', 'es5'],
};
Webpack 将生成 web 平台的运行时代码,并且只使用 ES5 相关的特性。
目前并不是所有的 target 都可以进行混合。
webpack.config.js
module.exports = {
// ...
target: ['web', 'node'],
};
此时会导致错误。webpack 暂时不支持 universal 的 target。
如果上述列表中的预设 target 都不符合你的需求,你可以将 target
设置为 false
,这将告诉 webpack 不使用任何插件。
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'),
],
};
当没有提供 target 或 environment 特性的信息时,将默认使用 ES2015。