Target
target 用于描述输出代码的运行环境。Rspack 会据此确定目标环境支持的平台 API 和 ECMAScript 语法,并自动设置与该环境兼容的模块解析条件、externals 预设和 chunk 加载方式。Rspack 生成的 runtime 代码也会使用目标环境支持的语法。
当 Rspack 内置的 loader 和压缩插件未显式配置目标时,它们也可以从 target 继承默认值。但 target 不会为缺失的 API 注入 polyfill。
- 类型:
- 默认值: 当项目中包含标准的 Browserslist 配置时为
browserslist,否则为web
推荐配置
浏览器
对于浏览器应用,在共享的 Browserslist 配置中声明需要支持的浏览器(详见 Browserslist 小节):
使用以下配置:
当项目中包含标准的 Browserslist 配置时,target 默认就是 browserslist,因此可以省略这一选项。显式保留可以让配置意图更清晰。
固定语法版本
如果不使用 Browserslist,并且希望浏览器产物的 runtime 最多使用 ES2020 语法,可以组合平台和语法 target(详见 Target 数组):
web 用于选择平台。es2020 会限制 Rspack runtime 使用的语法;支持继承 target 的内置转换工具也会将它作为默认输出目标。
Node.js
对于 Node.js 应用,指定部署环境中使用的最低 Node.js 版本:
请将 22 替换为应用实际支持的版本。指定版本后,Rspack 可以使用该版本确定支持的 runtime 特性。不指定版本的 node 会采用更保守的兼容性假设。
Web worker
对于运行在 Web Worker、Shared Worker 或 Service Worker 中的代码,使用:
该配置会使用 worker 全局对象和 chunk 加载方式,而不依赖 document 等浏览器 API。
常用值
下表中的 X 和 Y 表示版本号,方括号表示可选部分。例如,node22、node22.12 和 electron34-renderer 都是有效值,不需要输入方括号。
- 支持的 ECMAScript target 包括
es3、es5,以及es2015至es2025。 esXtarget 只描述语法能力,不描述运行平台。通常它应该与web、node等平台 target 组合使用。- Node.js、Electron 和 NW.js target 都可以指定版本。
作用范围
输出默认值
Rspack 会从 target 派生多项默认配置,包括:
browser、node和electron等模块解析条件output.environment、chunk 格式、chunk 加载、worker 加载和 WebAssembly 加载方式- externals 预设,例如将 Node.js 或 Electron 内置模块保留为 external
document、require、global和importScripts等平台全局对象与能力
这些配置都是默认值。当 target 预设不符合某项具体输出要求时,可以单独覆盖对应选项。
源码转换
target 会直接控制 Rspack 生成的 runtime 可以使用哪些语法,但它本身不会自动降级每一个应用模块的语法。
使用以下内置工具且没有显式配置转换目标时,它们会从 target 继承兼容的默认值:
builtin:swc-loader会派生env.targets或jsc.targetbuiltin:lightningcss-loader会在存在浏览器目标时派生对应的 targetSwcJsMinimizerRspackPlugin会派生 ECMAScript targetLightningCssMinimizerRspackPlugin会在存在浏览器目标时派生对应的 target
只有经过这些工具处理的代码才会应用相应转换。由 Babel 处理的代码遵循 Babel 自身的配置。内置工具也可能将继承的 target 限制在自身支持的版本范围内。
Target 数组
target 数组会将所有值共同支持的特性子集应用于同一次编译。常见用法是在平台 target 上增加 ECMAScript 约束:
target 数组不会为每个环境创建独立的编译任务。组合 ['web', 'node'] 等存在冲突的平台 target,可能导致 chunk 格式等默认值无法确定。
如果需要分别生成浏览器和 Node.js 产物,应导出多份配置:
Rspack 会通过 MultiCompiler 运行这些配置,并为每一项创建独立的编译任务。
Browserslist
browserslist target 会通过 Browserslist 查询推断平台以及支持的 ECMAScript 特性。浏览器查询会选择 web target,Node.js 查询则会选择具备对应 runtime 能力的 Node.js target。
Rspack 支持以下格式:
最近的配置可以来自 browserslist 或 .browserslistrc 文件,也可以来自 package.json 中的 browserslist 字段。显式选择 browserslist target 时,还可以使用 BROWSERSLIST 环境变量。Rspack 支持浏览器和 Node.js 查询,但不支持 Electron 查询。
Baseline
Rspack 2.1.9 及更高版本支持 Baseline 查询。例如,以下 target 包含支持 Baseline Widely Available 中所有特性的浏览器:
你也可以使用 baseline 2024 等年份查询,或 baseline widely available on 2025-05-01 等固定日期查询。更多信息请参考在 Browserslist 中使用 Baseline。
限制
Rspack 使用 browserslist-rs,它尚未实现 Browserslist 的全部功能。目前不支持以下查询:
- 自定义使用率查询,例如
> 0.5% in my stats - 覆盖率查询,例如
cover 99.5% in my stats
禁用 target
仅在需要用自定义配置替代 target 推断时,才将 target 设为 false。这会禁用所有由 target 派生的默认值。
以下是使用 CommonJS chunk 格式的最小配置:
只配置 target: false 会构建失败,因为 Rspack 无法推断 output.chunkFormat。必须显式设置 output.chunkFormat,然后根据运行环境按需配置 output.environment、chunk 加载、解析条件和 externals 预设等选项。
相关配置
output.environment:覆盖从 target 派生的 runtime 语法能力。output.chunkFormat和output.chunkLoading:覆盖 chunk 的输出与加载方式。externalsPresets:控制哪些平台内置模块被视为 external。resolve.conditionNames:控制解析package.json中的exports字段时使用的条件。- 插件作者可以通过
compiler.target读取解析后的 target。
本页改编自 webpack 文档,遵循 CC BY 4.0,且已作修改。

