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

# 默认行为

Rslib 基于 Rsbuild 和 Rspack，并针对库构建场景调整了一些默认行为。

这些默认行为通常取决于 [format](/zh/config/lib/format.md)、[bundle](/zh/config/lib/bundle.md)、[output.target](/zh/config/rsbuild/output.md#outputtarget) 等配置，以及 `package.json` 和 `tsconfig.json` 文件中的部分属性，你可以通过配置和插件调整这些行为。

## 环境变量 \{#environment-variables}

Rslib 在构建库代码时，会根据 [format](/zh/config/lib/format.md) 选择将源代码中的 `process.env.NODE_ENV` 表达式保留在产物中，或在构建时替换为指定值：

| 产物格式           | 默认行为                                                                                                                                     |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `esm` / `cjs`  | 保留表达式，交给使用方的应用在二次构建时替换和优化，或在直接运行时根据实际环境变量选择分支。                                                                                           |
| `umd` / `iife` | 直接加载，在库构建时替换为构建进程的 `NODE_ENV`，默认为 `'production'`。                                                                                        |
| `mf`           | 直接加载，默认在 [mf-dev](/zh/guide/basic/cli.md#rslib-mf-dev) 时替换为 `'development'`，在 [build](/zh/guide/basic/cli.md#rslib) 时替换为 `'production'`。 |

你可以通过 [source.define](/zh/config/rsbuild/source.md#sourcedefine) 显式指定替换值，或通过 [tools.rspack](/zh/config/rsbuild/tools.md#toolsrspack) 配置 Rspack 的 [optimization.nodeEnv](https://rspack.rs/zh/config/optimization#optimizationnodeenv) 来调整或关闭替换。

有关其他预设环境变量、`.env` 文件的加载规则及变量替换方式，请参阅 [环境变量](/zh/guide/advanced/env-vars.md)。

## 格式、入口和依赖

不同 [format](/zh/config/lib/format.md) 对应的默认设置如下：

| 格式     | [output.target](/zh/config/rsbuild/output.md#outputtarget) | [output.autoExternal](/zh/config/rsbuild/output.md#outputautoexternal) | 支持 [bundle: false](/zh/config/lib/bundle.md#bundle-false) |
| ------ | ---------------------------------------------------------- | ---------------------------------------------------------------------- | --------------------------------------------------------- |
| `esm`  | `'node'`                                                   | `true`                                                                 | 是                                                         |
| `cjs`  | `'node'`                                                   | `true`                                                                 | 是                                                         |
| `umd`  | `'node'`                                                   | `false`                                                                | 否                                                         |
| `iife` | `'node'`                                                   | `false`                                                                | 否                                                         |
| `mf`   | `'web'`                                                    | `false`                                                                | 否                                                         |

:::note
`output.autoExternal` 对 JavaScript 依赖的自动 external 仅在 bundle 模式下生效。
:::

[format](/zh/config/lib/format.md) 和 [output.target](/zh/config/rsbuild/output.md#outputtarget) 分别指定模块格式和目标运行环境。构建面向浏览器的库时，将 `output.target` 设置为 `'web'`，MF 格式还需要添加 [Module Federation 插件](/zh/guide/advanced/module-federation.md#快速开始)。

结合产物格式、目标环境和 [bundle](/zh/config/lib/bundle.md) 配置，Rslib 对入口、目录结构和依赖采用以下默认处理：

| 功能           | 默认行为                                                                                                                                                                     | 相关链接                                                                                                                                                                                                                  |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 入口           | bundle 模式查找 `src/index`；bundleless 模式匹配 `src/**`，保留文件结构。                                                                                                                 | [source.entry](/zh/config/rsbuild/source.md#sourceentry)、[bundle](/zh/config/lib/bundle.md)                                                                                                                           |
| 目录结构         | bundleless 模式以输入文件（不含类型声明文件）的最长公共目录为基础，保留相对目录结构。                                                                                                                         | [outBase](/zh/config/lib/out-base.md)                                                                                                                                                                                 |
| 模块引用         | bundleless 模式将本地 JS、样式和资源引用改为相对产物路径，并补全或替换扩展名；包名引用保留。                                                                                                                    | [redirect.js](/zh/config/lib/redirect.md#redirectjs)、[redirect.style](/zh/config/lib/redirect.md#redirectstyle)、[redirect.asset](/zh/config/lib/redirect.md#redirectasset)                                            |
| 自动 external  | bundle 模式下，ESM/CJS 将 `dependencies`、`optionalDependencies`、`peerDependencies` 及其子路径设为 external，不含 `devDependencies`。                                                     | [output.autoExternal](/zh/config/rsbuild/output.md#outputautoexternal)、[output.externals](/zh/config/rsbuild/output.md#outputexternals)                                                                               |
| external 类型  | ESM：`modern-module`；CJS：`commonjs-import`；UMD：`umd`；IIFE/MF：`global`。                                                                                                    | [output.externals](/zh/config/rsbuild/output.md#outputexternals)、[externalsType](https://rspack.rs/zh/config/externals#externalstype)                                                                                 |
| Node.js 内置模块 | `output.target` 为 `'node'` 时，设置 `externalsPresets.node: false`，显式将内置模块设为 external，使其使用对应格式的 `externalsType`，匹配 `import` / `require` 的引用语义；不受 `output.autoExternal` 开关影响。 | [output.externals](/zh/config/rsbuild/output.md#outputexternals)、[externalsPresets.node](https://rspack.rs/zh/config/externals#externalspresets)、[externalsType](https://rspack.rs/zh/config/externals#externalstype) |

## 语法和模块兼容性

| 功能             | 默认行为                                                                                                                                                                                                   | 相关链接                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 语法目标           | `output.target` 为 `'node'` 时，优先采用 `package.json#engines.node` 的最低版本；无法推导或 `output.target` 为 `'web'` 时，使用 `esnext`。                                                                                     | [syntax](/zh/config/lib/syntax.md)                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| 语法转换           | 根据 `syntax` 及其默认值设置 Rsbuild 的 `output.overrideBrowserslist`，控制 JavaScript 和 CSS 的语法转换，同时设置 Rspack 的 `target`，控制运行时代码语法（`esnext` 对应 `es2025`）。默认不读取项目的 `.browserslistrc` 或 `package.json#browserslist`。 | [syntax](/zh/config/lib/syntax.md)、[output.overrideBrowserslist](/zh/config/rsbuild/output.md#outputoverridebrowserslist)、[target](https://rspack.rs/zh/config/target)                                                                                                                                                                                                                                                                                                         |
| 变量声明           | `output.target` 为 `'web'` 时，移除 Rsbuild 的 `output.environment.const: false` 预设，避免强制生成 `var`。                                                                                                            | [output.environment](https://rspack.rs/zh/config/output#outputenvironment)                                                                                                                                                                                                                                                                                                                                                                                                     |
| 依赖编译           | 默认跳过 `node_modules` 中 JavaScript 文件的 SWC 编译，但仍编译 TypeScript 和 JSX 文件。                                                                                                                                  | [source.include](/zh/config/rsbuild/source.md#sourceinclude)、[source.exclude](/zh/config/rsbuild/source.md#sourceexclude)                                                                                                                                                                                                                                                                                                                                                      |
| 路径别名           | 支持读取 `tsconfig.json` 中的 `compilerOptions.paths` 和 `resolve.alias`，默认 `compilerOptions.paths` 的优先级更高。                                                                                                   | [resolve.alias](/zh/config/rsbuild/resolve.md#resolvealias)、[resolve.aliasStrategy](/zh/config/rsbuild/resolve.md#resolvealiasstrategy)                                                                                                                                                                                                                                                                                                                                        |
| TypeScript 导入  | 支持用 JavaScript 扩展名导入 TypeScript 文件，如 `.js` 可解析到 `.ts` 或 `.tsx`。                                                                                                                                        | [resolve.extensionAlias](https://rspack.rs/zh/config/resolve#resolveextensionalias)                                                                                                                                                                                                                                                                                                                                                                                            |
| 扩展名解析          | 省略导入扩展名时，依次尝试 `.ts`、`.tsx`、`.mjs`、`.js`、`.jsx` 和 `.json`。                                                                                                                                              | [resolve.extensions](/zh/config/rsbuild/resolve.md#resolveextensions)                                                                                                                                                                                                                                                                                                                                                                                                          |
| 装饰器            | `tsconfig.json` 启用 `experimentalDecorators` 时使用 `legacy`，否则使用 `2023-11`。                                                                                                                               | [source.decorators](/zh/config/rsbuild/source.md#sourcedecorators)                                                                                                                                                                                                                                                                                                                                                                                                             |
| JSX            | 默认支持将 JSX 转换为 JavaScript，bundleless 模式下还支持保留 JSX 语法。                                                                                                                                                   | [JSX 转换](/zh/guide/solution/react.md#jsx-transform)                                                                                                                                                                                                                                                                                                                                                                                                                            |
| 动态模块路径         | ESM/CJS 保留动态路径的 `import()` / `require()`、`require.resolve()` 和作为值的 `require`；静态路径的 `import()` 仍可分包。                                                                                                    | [module.parser.javascript.importDynamic](https://rspack.rs/zh/config/module-parser#javascriptimportdynamic)<br />[module.parser.javascript.requireDynamic](https://rspack.rs/zh/config/module-parser#javascriptrequiredynamic)<br />[module.parser.javascript.requireResolve](https://rspack.rs/zh/config/module-parser#javascriptrequireresolve)<br />[module.parser.javascript.requireAsExpression](https://rspack.rs/zh/config/module-parser#javascriptrequireasexpression) |
| 模块类型识别         | 保留 Rspack 按扩展名和 `package.json#type` 识别模块类型的默认行为，如 `.mjs` 文件按 `javascript/esm` 处理。Rsbuild 对进入 SWC 编译规则的 JavaScript、TypeScript 和 JSX 文件设置 `type: 'javascript/auto'`，Rslib 移除该预设。                         | [module.rules](https://rspack.rs/zh/config/module-rules#rulestype)                                                                                                                                                                                                                                                                                                                                                                                                             |
| CommonJS 导出    | ESM/CJS 设置 `commonjs.exports: 'skipInEsm'`，保留 ESM 源文件中的 `module.exports` 和 `exports` 赋值。                                                                                                               | [module.parser.javascript.commonjs](https://rspack.rs/zh/config/module-parser#javascriptcommonjs)                                                                                                                                                                                                                                                                                                                                                                              |
| CommonJS shims | CJS 默认兼容 `import.meta.url`、`import.meta.dirname` 和 `import.meta.filename`。                                                                                                                             | [shims.cjs](/zh/config/lib/shims.md#shimscjs)                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ESM shims      | `__dirname`、`__filename` 和 `require` shims 默认关闭。                                                                                                                                                       | [shims.esm](/zh/config/lib/shims.md#shimsesm)                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| SWC helpers    | `externalHelpers: false`，默认内联所需的辅助函数。Rsbuild 则在 SWC 编译阶段从 [@swc/helpers](https://www.npmjs.com/package/@swc/helpers) 导入。                                                                               | [externalHelpers](/zh/config/lib/external-helpers.md)                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Polyfills      | `output.polyfill: 'off'`，不自动补齐运行时 API。                                                                                                                                                                 | [output.polyfill](/zh/config/rsbuild/output.md#outputpolyfill)、[产物兼容性](/zh/guide/advanced/output-compatibility.md)                                                                                                                                                                                                                                                                                                                                                             |

## 优化和分包

Rslib 通过 Rsbuild 的 [mode](https://rsbuild.rs/zh/config/mode) 配置选择构建和优化策略：

- `rslib` 和 `rslib --watch` 使用 `'production'`，watch 只增加文件监听和重新构建。
- `rslib mf-dev` 使用 `'development'`，用于 MF 开发服务。

`mode` 是独立于构建进程 `NODE_ENV` 的配置。例如，执行 `NODE_ENV=development rslib` 时，构建仍使用 `mode: 'production'`。

Rslib 在此基础上调整了以下优化默认值：

| 功能         | 默认行为                                                                                                                                                                       | 相关链接                                                                                                                                                                                                                                                                                                       |
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 压缩         | 生产模式下清理死代码和未使用代码，保留变量名和 Pure 注解。<br />ESM/CJS/UMD/IIFE 保留代码格式；MF 删除多余的空白和换行，并关闭顶层未使用代码消除，以保留 remote entry 全局变量。                                                            | [output.minify](/zh/config/rsbuild/output.md#outputminify)                                                                                                                                                                                                                                                 |
| 分包         | `splitChunks.preset: 'none'`；ESM/CJS 仅从异步 chunk 提取公共代码；UMD/IIFE 关闭分包和异步 chunk。                                                                                             | [splitChunks](https://rsbuild.rs/zh/config/split-chunks)、[optimization.splitChunks](https://rspack.rs/zh/config/optimization#optimizationsplitchunks)、[output.asyncChunks](https://rspack.rs/zh/config/output#outputasyncchunks)                                                                           |
| 模块 ID      | 非 MF 格式：`output.target` 为 `'node'` 时使用 `'named'`，为 `'web'` 时沿用 Rsbuild 的默认值 `'compact-hashed'`。<br />MF 格式沿用 Rsbuild 的默认值：常规构建使用 `'compact-hashed'`，`mf-dev` 使用 `'named'`。 | [optimization.moduleIds](https://rspack.rs/zh/config/optimization#optimizationmoduleids)                                                                                                                                                                                                                   |
| Chunk ID   | 沿用 Rsbuild 的默认值：常规构建使用 `'compact-hashed'`，`mf-dev` 使用 `'named'`。                                                                                                           | [optimization.chunkIds](https://rspack.rs/zh/config/optimization#optimizationchunkids)                                                                                                                                                                                                                     |
| ESM 产物优化   | `concatenateModules: false`、`sideEffects: true`、`avoidEntryIife: true`，配合 `modern-module` 输出，便于下游 tree shaking。                                                            | [optimization.concatenateModules](https://rspack.rs/zh/config/optimization#optimizationconcatenatemodules)、[optimization.sideEffects](https://rspack.rs/zh/config/optimization#optimizationsideeffects)、[optimization.avoidEntryIife](https://rspack.rs/zh/config/optimization#optimizationavoidentryiife) |
| 共享 runtime | ESM 在 bundleless 或多个显式入口时设置 `runtimeChunk: { name: 'rslib-runtime' }`，复用运行时代码。                                                                                             | [optimization.runtimeChunk](https://rspack.rs/zh/config/optimization#optimizationruntimechunk)                                                                                                                                                                                                             |

:::note

- 手动设置 `output.minify` 会**替换整套默认压缩配置**，即使只设置对象中的部分选项，也不会继承上述预设。`output.minify: false` 只关闭压缩器，Rspack 仍会分析导出的使用情况和副作用，但可能保留未使用的声明。
- `splitChunks.preset: 'none'` **不保证只生成一个文件**：动态导入、多个入口、Worker 和运行时代码都可能产生额外文件。

:::

## 产物文件

| 功能             | 默认行为                                                                                                                                                                                                 | 相关链接                                                                                                                                                                                                                              |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 输出目录           | 根目录为 `dist`，JS/CSS 直接放在其中；静态资源按类型分目录。                                                                                                                                                                | [output.distPath](/zh/config/rsbuild/output.md#outputdistpath)                                                                                                                                                                    |
| JavaScript 扩展名 | `autoExtension: true`，按格式和 `package.json#type` 选择 `.js`、`.mjs` 或 `.cjs`。                                                                                                                             | [autoExtension](/zh/config/lib/auto-extension.md)、[output.filename](/zh/config/rsbuild/output.md#outputfilename)                                                                                                                  |
| 文件名 hash       | 非 MF 格式不加 hash，保持文件名稳定；MF 在生产模式下默认在 JS/CSS 文件名中添加 hash 值，开发模式下不添加。                                                                                                                                   | [output.filenameHash](/zh/config/rsbuild/output.md#outputfilenamehash)                                                                                                                                                            |
| JavaScript 文件名 | 非 MF 格式使用 `[name]` 加自动扩展名，如 `[name].mjs`；启用 `filenameHash: true` 时加入 `[contenthash:10]`。                                                                                                             | [output.filename](/zh/config/rsbuild/output.md#outputfilename)、[output.filenameHash](/zh/config/rsbuild/output.md#outputfilenamehash)                                                                                             |
| chunk 文件名      | 入口文件和异步 chunk 的文件名默认由 Rsbuild 的 `output.filename.js` 配置统一设置。<br />配置多个 `lib` 时，非 MF 辅助 chunk 和异步 chunk 按 `lib` 数组中各对象的顺序添加后缀，第一个为 `~0`，第二个为 `~1`，以此类推，避免文件冲突；入口文件名不变。自定义文件名函数时不添加后缀，异步 chunk 也使用该函数。 | [Rsbuild output.filename](/zh/config/rsbuild/output.md#outputfilename)、[Rspack output.filename](https://rspack.rs/zh/config/output#outputfilename)、[output.chunkFilename](https://rspack.rs/zh/config/output#outputchunkfilename) |
| 库导出类型          | `output.library.type`：ESM 为 `'modern-module'`，并设置 `output.module: true`；CJS 为 `'commonjs-static'`；UMD 为 `'umd'`；IIFE 为 `'module'`，并设置 `output.iife: true`。                                           | [output.library.type](https://rspack.rs/zh/config/output#outputlibrarytype)、[output.iife](https://rspack.rs/zh/config/output#outputiife)、[output.module](https://rspack.rs/zh/config/output#outputmodule)                         |
| UMD 导出名称       | `format` 为 `'umd'` 时，设置 `output.library.type: 'umd'`，并将 `umdName` 作为 Rspack 的 `output.library.name`，默认不设置名称。                                                                                         | [umdName](/zh/config/lib/umd-name.md)、[output.library.name](https://rspack.rs/zh/config/output#outputlibraryname)                                                                                                                 |
| Chunk 格式和加载    | ESM：`chunkFormat: false`、`chunkLoading: 'import'`；CJS：`chunkFormat: 'commonjs'`、`chunkLoading: 'require'`、`iife: false`。                                                                             | [output.chunkFormat](https://rspack.rs/zh/config/output#outputchunkformat)、[output.chunkLoading](https://rspack.rs/zh/config/output#outputchunkloading)、[output.iife](https://rspack.rs/zh/config/output#outputiife)              |
| IIFE 全局对象      | `output.globalObject: 'globalThis'`，用于访问全局外部依赖。                                                                                                                                                      | [output.globalObject](https://rspack.rs/zh/config/output#outputglobalobject)                                                                                                                                                      |
| 清理产物           | `output.cleanDistPath: 'auto'`，构建前仅清理项目根目录内的产物子目录。                                                                                                                                                   | [output.cleanDistPath](/zh/config/rsbuild/output.md#outputcleandistpath)                                                                                                                                                          |
| Source map     | 生产构建不生成 JS/CSS source map；MF 开发模式生成 JS source map。                                                                                                                                                   | [output.sourceMap](/zh/config/rsbuild/output.md#outputsourcemap)                                                                                                                                                                  |
| HTML           | `tools.htmlPlugin: false`，不生成 HTML。                                                                                                                                                                  | [tools.htmlPlugin](https://rsbuild.rs/zh/config/tools/html-plugin)                                                                                                                                                                |
| MF 输出          | `output.uniqueName` 来自 `package.json#name`；`mf-dev` 产物默认写入磁盘。                                                                                                                                        | [output.uniqueName](https://rspack.rs/zh/config/output#outputuniquename)、[dev.writeToDisk](https://rsbuild.rs/zh/config/dev/write-to-disk)                                                                                        |

## 静态资源

| 功能                | 默认行为                                                                                                                                          | 相关链接                                                                                                                                                                                                                                    |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| JavaScript 中的资源引用 | ESM/CJS 使用 `assetPrefix: 'auto'`，输出资源并保留 `import`/`require`；其他格式使用 `'/'`。                                                                     | [output.assetPrefix](/zh/config/rsbuild/output.md#outputassetprefix)                                                                                                                                                                    |
| 资源内联              | ESM/CJS 不内联资源（阈值为 `0`）；其他格式沿用 Rsbuild 的 4 KiB 阈值。                                                                                             | [output.dataUriLimit](/zh/config/rsbuild/output.md#outputdataurilimit)                                                                                                                                                                  |
| `new URL()`       | ESM 处理静态 `new URL(..., import.meta.url)`，输出原始资源并改为相对产物路径。                                                                                     | [new URL 引用](/zh/guide/advanced/static-assets.md#new-url-引用)                                                                                                                                                                            |
| Worker            | ESM 将 `new Worker(new URL(...))` 的引用构建为 ES 模块 Worker，并设置 `type: 'module'`。<br />`workerChunkLoading`：ESM 使用 `'import'`，CJS 使用 `'async-node'`。 | [Web Workers](/zh/guide/advanced/web-workers.md)、[module.parser.javascript.worker](https://rspack.rs/zh/config/module-parser#javascriptworker)、[output.workerChunkLoading](https://rspack.rs/zh/config/output#outputworkerchunkloading) |
| Wasm              | ESM bundle 模式使用 `compile`，生成加载代码；bundleless 使用 `preserve`，保留引用并复制文件。                                                                          | [wasm.mode](/zh/config/lib/wasm.md#wasmmode)                                                                                                                                                                                            |

## CSS

| 功能          | 默认行为                                                                                             | 相关链接                                                                                                                                                                                   |
| ----------- | ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CSS 输出      | `output.target` 为 `'web'` 时输出 CSS，为 `'node'` 时不输出；`output.injectStyles: false`，CSS 独立成文件。        | [output.emitCss](/zh/config/rsbuild/output.md#outputemitcss)、[output.injectStyles](/zh/config/rsbuild/output.md#outputinjectstyles)                                                    |
| 样式引用        | 提取 CSS 时，bundle 模式合并样式并移除 JS 中的样式导入；bundleless 按源文件输出并保留引用。                                      | [bundle](/zh/config/lib/bundle.md)、[CSS](/zh/guide/advanced/css.md)                                                                                                                    |
| CSS Modules | 默认匹配 `.module.*`；bundleless 生成类名映射的 JS 模块，并由它引用 CSS。                                             | [output.cssModules](/zh/config/rsbuild/output.md#outputcssmodules)                                                                                                                     |
| CSS 中的资源和引用 | ESM/CJS 解析 CSS `url()` 并输出相对资源路径；bundleless 设置 `tools.cssLoader.import: false`，保留 CSS `@import`。 | [redirect.style](/zh/config/lib/redirect.md#redirectstyle)、[CSS 中的资源引用](/zh/guide/advanced/static-assets.md#在-css-文件中引用)、[tools.cssLoader](/zh/config/rsbuild/tools.md#toolscssloader) |
| CSS 压缩      | 默认关闭，留给使用方统一优化。                                                                                  | [output.minify](/zh/config/rsbuild/output.md#outputminify)                                                                                                                             |

## 类型声明

Rslib 默认不生成类型声明文件。开启 `dts: true` 后，默认生成未打包的类型文件，与 JavaScript 的 `bundle` 设置无关。多份 JavaScript 产物可以共用类型文件，通常只需在一个 `lib` 项中开启 `dts`。

| 功能   | 默认行为                                                                                                                                                | 相关链接                                                                                                                                                                                                                 |
| ---- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 生成方式 | 根据项目安装的 TypeScript 版本选择生成方式：5/6 使用 Compiler API，7+ 使用 native TypeScript CLI。                                                                        | [dts.typescriptPath](/zh/config/lib/dts.md#dtstypescriptpath)、[dts.isolated](/zh/config/lib/dts.md#dtsisolated)、[dts.tsgo](/zh/config/lib/dts.md#dtstsgo)                                                            |
| 输入范围 | 默认按 `tsconfig.json` 的输入范围生成声明，目录结构由 `rootDir` 决定。                                                                                                   | [source.tsconfigPath](/zh/config/rsbuild/source.md#sourcetsconfigpath)                                                                                                                                               |
| 输出目录 | 优先级：`dts.distPath` → `tsconfig.json#declarationDir` → JS 产物根目录。                                                                                     | [dts.distPath](/zh/config/lib/dts.md#dtsdistpath)                                                                                                                                                                    |
| 打包   | `dts.bundle: false`；开启后由 [API Extractor](https://api-extractor.com/) 按入口打包。                                                                         | [dts.bundle](/zh/config/lib/dts.md#dtsbundle)                                                                                                                                                                        |
| 依赖处理 | 打包类型文件时，根据 `output.autoExternal` 和 `output.externals` 确定 external，将其余直接依赖的类型文件一起打包，默认排除 [@types/react](https://www.npmjs.com/package/@types/react)。 | [dts.bundle.bundledPackages](/zh/config/lib/dts.md#dtsbundlebundledpackages)、[output.autoExternal](/zh/config/rsbuild/output.md#outputautoexternal)、[output.externals](/zh/config/rsbuild/output.md#outputexternals) |
| 扩展名  | `dts.autoExtension: false`，默认使用 `.d.ts`；未打包时，`.mts` 和 `.cts` 源文件分别生成 `.d.mts` 和 `.d.cts`。                                                           | [dts.autoExtension](/zh/config/lib/dts.md#dtsautoextension)                                                                                                                                                          |
| 导入路径 | `redirect.dts.path` 和 `redirect.dts.extension` 默认均为 `true`，将路径别名转为相对路径，并补全或替换引用中的 JavaScript 扩展名。                                                   | [redirect.dts.path](/zh/config/lib/redirect.md#redirectdtspath)、[redirect.dts.extension](/zh/config/lib/redirect.md#redirectdtsextension)                                                                            |
| 路径别名 | 默认读取 `tsconfig.json` 的 `compilerOptions.paths`；设置 `dts.alias` 时，同名别名优先使用 `dts.alias`。                                                               | [dts.alias](/zh/config/lib/dts.md#dtsalias)                                                                                                                                                                          |
| 类型错误 | `dts.abortOnError: true`，声明生成错误使构建失败。                                                                                                               | [dts.abortOnError](/zh/config/lib/dts.md#dtsabortonerror)                                                                                                                                                            |
| 项目引用 | `dts.build: false`，不自动构建 TypeScript 项目引用。                                                                                                           | [dts.build](/zh/config/lib/dts.md#dtsbuild)                                                                                                                                                                          |

## 构建性能与产物体积

| 功能     | 默认行为                      | 相关链接                                                                                    |
| ------ | ------------------------- | --------------------------------------------------------------------------------------- |
| 持久化缓存  | 默认开启；Rsbuild 默认关闭。        | [performance.buildCache](/zh/config/rsbuild/performance.md#performancebuildcache)       |
| 产物体积日志 | bundleless 模式只打印文件总数和总体积。 | [performance.printFileSize](/zh/config/rsbuild/performance.md#performanceprintfilesize) |

## 调整和检查配置

所有产物共用的配置放在顶层，单个产物的配置放在对应的 `lib` 项中。`lib` 中的配置优先于顶层配置，再由这些配置决定对应的默认处理。CLI 中显式指定的构建参数会覆盖配置文件中的对应选项，详见 [CLI](/zh/guide/basic/cli.md)。

对象通常递归合并，数组通常追加；`resolve.extensions` 等选项则整体覆盖，具体规则见 [配置合并规则](https://rsbuild.rs/zh/api/javascript-api/core#合并规则)。通过 [mergeRslibConfig](/zh/api/javascript-api/core.md#mergerslibconfig) 合并多份配置时，`lib` 中相同 `id` 的项会合并，没有 `id` 的项会追加。

表格中的 Rspack 配置项可以通过 [tools.rspack](https://rsbuild.rs/zh/config/tools/rspack) 调整，用法请查看该配置文档，其他 Rslib 与 Rsbuild 配置项可以查看 [配置总览](/zh/config/index.md)。

你可以开启 [调试模式](/zh/guide/basic/configure-rslib.md#调试模式)，或运行 [rslib inspect](/zh/guide/basic/cli.md#rslib-inspect) 命令来查看最终生成的配置。
