> For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt.

# lib.syntax

- **类型：**

```ts
type EcmaScriptVersion =
  | 'es5'
  | 'es6'
  | 'es2015'
  | 'es2016'
  | 'es2017'
  | 'es2018'
  | 'es2019'
  | 'es2020'
  | 'es2021'
  | 'es2022'
  | 'es2023'
  | 'es2024'
  | 'es2025'
  | 'esnext';

type Syntax = EcmaScriptVersion | string[];
```

- **默认值：**
  - 当 [output.target](/zh/config/rsbuild/output.md#outputtarget) 为 `'node'`，且 `package.json#engines.node` 可推断出最低 Node.js 版本时，使用 `['node >= <minimum-version>']`
  - 其他情况下，使用 `'esnext'`
- **命令行：** `--syntax <value>`（可重复，例如 `--syntax es2018` 或 `--syntax="node 14" --syntax="Chrome 103"`）
- **顶层配置：** 支持

配置 JavaScript 和 CSS 将被降级的语法版本。

参考 [产物兼容性 - 语法降级](/zh/guide/advanced/output-compatibility.md) 了解更多详情。

## 默认行为

当 [output.target](/zh/config/rsbuild/output.md#outputtarget) 设置为 `'node'` 且未配置 `syntax` 时，Rslib 会尝试根据 `package.json#engines.node` 推断语法目标。如果 `package.json` 声明了可推断出最低版本的 `engines.node` 范围，Rslib 会使用该范围中的最低 Node.js 版本作为语法目标。

```json title="package.json"
{
  "engines": {
    "node": "^20.19.0 || >=22.12.0"
  }
}
```

上述配置等效于：

```ts title="rslib.config.ts"
export default {
  lib: [
    {
      syntax: ['node >= 20.19.0'],
    },
  ],
};
```

其他情况下，Rslib 默认使用 `'esnext'`。这意味着产物会以主流浏览器（Chrome / Firefox / Edge / macOS Safari / iOS Safari）或 Node.js 的最新版本为语法目标，具体取决于 [output.target](/zh/config/rsbuild/output.md#outputtarget)。

如需覆盖该默认行为，显式设置 `syntax` 即可。

## 设置 ECMAScript 版本

你可以直接设置 ECMAScript 版本，例如 `es2015`、`es2022` 等。

```ts title="rslib.config.ts"
export default {
  lib: [
    {
      syntax: 'es2015',
    },
  ],
};
```

## 设置 Browserslist 查询

你也可以设置 [Browserslist 查询语句](https://browsersl.ist/)，例如 `last 2 versions`、`> 1%`、`node >= 16`、`chrome >= 80` 等。

```ts title="rslib.config.ts"
export default {
  lib: [
    {
      syntax: ['last 2 versions', '> 1%'],
    },
  ],
};
```

## 混合使用 ECMAScript 版本和 browserslist 查询

你也可以混合使用 ECMAScript 版本和 Browserslist 查询语句，例如 `es2015` 和 `node 20`。Rslib 会将 ECMAScript 版本转换为 Browserslist 查询语句，然后将它们合并在一起。

```ts title="rslib.config.ts"
export default {
  lib: [
    {
      syntax: ['es2015', 'node 20'],
    },
  ],
};
```
