For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt, and this page is available as Markdown at /zh/config/target.md.
close

Target

target 用于描述输出代码的运行环境。Rspack 会据此确定目标环境支持的平台 API 和 ECMAScript 语法,并自动设置与该环境兼容的模块解析条件、externals 预设和 chunk 加载方式。Rspack 生成的 runtime 代码也会使用目标环境支持的语法。

当 Rspack 内置的 loader 和压缩插件未显式配置目标时,它们也可以从 target 继承默认值。但 target 不会为缺失的 API 注入 polyfill。

  • 类型:
type Target = false | string | string[];
  • 默认值: 当项目中包含标准的 Browserslist 配置时为 browserslist,否则为 web

推荐配置

浏览器

对于浏览器应用,在共享的 Browserslist 配置中声明需要支持的浏览器(详见 Browserslist 小节):

package.json
{
  "browserslist": ["fully supports es6"]
}

使用以下配置:

rspack.config.mjs
export default {
  target: 'browserslist',
};

当项目中包含标准的 Browserslist 配置时,target 默认就是 browserslist,因此可以省略这一选项。显式保留可以让配置意图更清晰。

固定语法版本

如果不使用 Browserslist,并且希望浏览器产物的 runtime 最多使用 ES2020 语法,可以组合平台和语法 target(详见 Target 数组):

rspack.config.mjs
export default {
  target: ['web', 'es2020'],
};

web 用于选择平台。es2020 会限制 Rspack runtime 使用的语法;支持继承 target 的内置转换工具也会将它作为默认输出目标。

Node.js

对于 Node.js 应用,指定部署环境中使用的最低 Node.js 版本:

rspack.config.mjs
export default {
  target: 'node22',
};

请将 22 替换为应用实际支持的版本。指定版本后,Rspack 可以使用该版本确定支持的 runtime 特性。不指定版本的 node 会采用更保守的兼容性假设。

Web worker

对于运行在 Web Worker、Shared Worker 或 Service Worker 中的代码,使用:

rspack.config.mjs
export default {
  target: 'webworker',
};

该配置会使用 worker 全局对象和 chunk 加载方式,而不依赖 document 等浏览器 API。

常用值

下表中的 XY 表示版本号,方括号表示可选部分。例如,node22node22.12electron34-renderer 都是有效值,不需要输入方括号。

用途
async-node[X[.Y]]Node.js 环境,通过 fsvm 异步加载 chunk
browserslist[:...]从 Browserslist 配置、环境或内联查询中推断平台和支持的特性
electron[X[.Y]]-mainElectron 主进程
electron[X[.Y]]-preloadElectron preload 脚本
electron[X[.Y]]-rendererElectron renderer 进程
esX限制 runtime 使用的 ECMAScript 特性,通常与平台 target 组合使用
false禁用 target 推断以及由 target 派生的默认值
node[X[.Y]]Node.js 环境,通过 require() 加载 chunk
node-webkit[X[.Y]]对应 NW.js target 的别名
nwjs[X[.Y]]NW.js 环境
web类浏览器环境
webworkerWeb Worker、Shared Worker 或 Service Worker 环境
  • 支持的 ECMAScript target 包括 es3es5,以及 es2015es2025
  • esX target 只描述语法能力,不描述运行平台。通常它应该与 webnode 等平台 target 组合使用。
  • Node.js、Electron 和 NW.js target 都可以指定版本。

作用范围

输出默认值

Rspack 会从 target 派生多项默认配置,包括:

  • browsernodeelectron模块解析条件
  • output.environment、chunk 格式、chunk 加载、worker 加载和 WebAssembly 加载方式
  • externals 预设,例如将 Node.js 或 Electron 内置模块保留为 external
  • documentrequireglobalimportScripts 等平台全局对象与能力

这些配置都是默认值。当 target 预设不符合某项具体输出要求时,可以单独覆盖对应选项。

源码转换

target 会直接控制 Rspack 生成的 runtime 可以使用哪些语法,但它本身不会自动降级每一个应用模块的语法。

使用以下内置工具且没有显式配置转换目标时,它们会从 target 继承兼容的默认值:

只有经过这些工具处理的代码才会应用相应转换。由 Babel 处理的代码遵循 Babel 自身的配置。内置工具也可能将继承的 target 限制在自身支持的版本范围内。

Target 数组

target 数组会将所有值共同支持的特性子集应用于同一次编译。常见用法是在平台 target 上增加 ECMAScript 约束:

rspack.config.mjs
export default {
  target: ['web', 'es2018'],
};

target 数组不会为每个环境创建独立的编译任务。组合 ['web', 'node'] 等存在冲突的平台 target,可能导致 chunk 格式等默认值无法确定。

如果需要分别生成浏览器和 Node.js 产物,应导出多份配置:

rspack.config.mjs
export default [
  {
    name: 'client',
    entry: './src/client.js',
    target: 'web',
    output: {
      filename: 'client.js',
    },
  },
  {
    name: 'server',
    entry: './src/server.js',
    target: 'node22',
    output: {
      filename: 'server.js',
    },
  },
];

Rspack 会通过 MultiCompiler 运行这些配置,并为每一项创建独立的编译任务。

Browserslist

browserslist target 会通过 Browserslist 查询推断平台以及支持的 ECMAScript 特性。浏览器查询会选择 web target,Node.js 查询则会选择具备对应 runtime 能力的 Node.js target。

Rspack 支持以下格式:

解析方式
browserslist使用最近的配置及其当前环境
browserslist:modern使用最近配置中的 modern 环境
browserslist:last 2 versions使用内联查询,并忽略项目中的配置
browserslist:/path/to/config使用指定的配置文件
browserslist:/path/to/config:modern使用指定配置文件中的 modern 环境

最近的配置可以来自 browserslist.browserslistrc 文件,也可以来自 package.json 中的 browserslist 字段。显式选择 browserslist target 时,还可以使用 BROWSERSLIST 环境变量。Rspack 支持浏览器和 Node.js 查询,但不支持 Electron 查询。

Baseline

Rspack 2.1.9 及更高版本支持 Baseline 查询。例如,以下 target 包含支持 Baseline Widely Available 中所有特性的浏览器:

rspack.config.mjs
export default {
  target: 'browserslist: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 格式的最小配置:

rspack.config.mjs
export default {
  target: false,
  output: {
    chunkFormat: 'commonjs',
  },
};

只配置 target: false 会构建失败,因为 Rspack 无法推断 output.chunkFormat。必须显式设置 output.chunkFormat,然后根据运行环境按需配置 output.environment、chunk 加载、解析条件和 externals 预设等选项。

相关配置

本页改编自 webpack 文档,遵循 CC BY 4.0,且已作修改。