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

# source

与输入的源代码相关的选项。

## source.decorators [![source.decorators](https://assets.rspack.rs/rsbuild/rsbuild-logo.svg)source.decorators](https://rsbuild.rs/zh/config/source/decorators)
用于配置装饰器语法。

如果你使用了 TypeScript 的 [experimentalDecorators](https://www.typescriptlang.org/tsconfig/#experimentalDecorators)，此处应将 `source.decorators.version` 设置为 legacy。

## source.assetsInclude [![source.assetsInclude](https://assets.rspack.rs/rsbuild/rsbuild-logo.svg)source.assetsInclude](https://rsbuild.rs/zh/config/source/assets-include)

[Added in v0.9.6](https://github.com/web-infra-dev/rstest/releases/tag/v0.9.6)

指定额外需要按静态资源处理的文件。

当你的测试会导入 Rsbuild 默认资源规则之外的文件类型时，这个配置很有用，比如 `.txt` 或 `.md`。

```ts
import { defineConfig } from '@rstest/core';

export default defineConfig({
  source: {
    assetsInclude: /\.(txt|md)$/,
  },
});
```

如果你已经通过 `@rstest/adapter-rsbuild` 或 `@rstest/adapter-rslib` 复用 Rsbuild / Rslib 配置，`source.assetsInclude` 也会被自动继承。

## source.define [![source.define](https://assets.rspack.rs/rsbuild/rsbuild-logo.svg)source.define](https://rsbuild.rs/zh/config/source/define)
构建时将代码中的变量替换成其它值或者表达式，可以用于在构建时向代码注入环境变量等信息。

## source.exclude [![source.exclude](https://assets.rspack.rs/rsbuild/rsbuild-logo.svg)source.exclude](https://rsbuild.rs/zh/config/source/exclude)
排除不需要被 [SWC](https://rsbuild.rs/zh/guide/configuration/swc) 转译的 JavaScript 或 TypeScript 文件。

::: note

在 `source.exclude` 中配置的文件不会经过 SWC 转译，但被引用的文件仍然会被打包到产物中。

如果你希望某些文件不被打包到产物中，可以使用 [output.externals](/zh/config/build/output.md#outputexternals) 配置项或 Rspack 的 [IgnorePlugin](https://rspack.rs/zh/plugins/webpack/ignore-plugin)。
:::

## source.include [![source.include](https://assets.rspack.rs/rsbuild/rsbuild-logo.svg)source.include](https://rsbuild.rs/zh/config/source/include)
指定额外需要编译的 JavaScript 文件。

## source.transformImport [![source.transformImport](https://assets.rspack.rs/rsbuild/rsbuild-logo.svg)source.transformImport](https://rsbuild.rs/zh/config/source/transform-import)

[Added in v0.9.6](https://github.com/web-infra-dev/rstest/releases/tag/v0.9.6)

配置按需导入转换规则。

```ts title="rstest.config.ts"
import { defineConfig } from '@rstest/core';

export default defineConfig({
  source: {
    transformImport: [
      {
        libraryName: 'demo-lib',
        libraryDirectory: '.',
        camelToDashComponentName: false,
      },
    ],
  },
});
```

:::caution

`source.transformImport` 会在编译阶段改写最终的模块请求。

当前实现下，`rs.mock('pkg')`、`rs.doMock('pkg')`、`rs.importActual('pkg')`、`rs.requireActual('pkg')` 这类仍然使用原始 specifier 的模块级 mock API，可能无法命中被改写后的模块请求。

:::

## source.tsconfigPath [![source.tsconfigPath](https://assets.rspack.rs/rsbuild/rsbuild-logo.svg)source.tsconfigPath](https://rsbuild.rs/zh/config/source/tsconfig-path)
- **CLI：** `--source.tsconfigPath <path>`

配置自定义的 `tsconfig.json` 文件路径，可以是相对路径或绝对路径。

未配置该选项时，Rstest 会在每个项目的 root 目录探测 `tsconfig.json`。其中的 `compilerOptions.paths` 映射会用于模块解析。

Rstest 不会自动将其他 `compilerOptions` 转换为代码转换设置。需要时请配置对应的 Rstest 构建选项，包括用 [`source.decorators`](#sourcedecorators) 配置装饰器语法，以及用 [`tools.swc`](/zh/config/build/tools.md#toolsswc) 配置输出 target 等 SWC 选项。adapter 可能会映射或推断额外的构建选项，请参考所用 [adapter 的文档](/zh/guide/advanced/adapters.md)。例如，直接配置且使用 legacy 装饰器的项目可以这样配置：

```ts title="rstest.config.ts"
import { defineConfig } from '@rstest/core';

export default defineConfig({
  source: {
    decorators: {
      version: 'legacy',
    },
  },
});
```
