测试与维护

测试矩阵

仓库测试分为四类:

类型命令配置覆盖
单元测试pnpm test:unitrstest.config.ts 加各 package rstest.config.tscore、plugin-dts、create-rslib 的函数级行为
集成测试pnpm test:integrationtests/rstest.config.tsintegration projectRslib 构建输出、格式、bundleless、externals、CSS、dts、资源等
exe 集成测试pnpm test:integration:exetests/rstest.config.tsintegration-exe projectexperiments.exe 慢速 SEA 场景
E2E 测试pnpm test:e2etests/playwright.config.tsReact、Vue、Module Federation 等浏览器运行场景

根命令 pnpm test 会串行运行 unit、integration 和 e2e。

Rstest 配置

rstest.config.ts 定义共享配置:

  • globals: true
  • testEnvironment: "node"
  • testTimeout: 60000
  • hookTimeout: 50000
  • restoreMocks: true
  • output.module: true
  • worker 上限为 80%,给 dts 子进程留资源

它还注册了 replace-loader-url 测试插件,在测试编译 EntryChunkPlugin.ts 时把 loader URL 替换成 .ts,方便源码测试。

各 package 的测试配置:

配置project name说明
packages/core/rstest.config.tsunit使用 @rstest/adapter-rslib 编译 core 源码
packages/plugin-dts/rstest.config.tsunit-dts关闭颜色,便于断言日志
packages/create-rslib/rstest.config.tsunit-create包含 test/*,并隐藏 console log

集成测试结构

tests/integration 下每个目录通常是一个独立 case,包含 index.test.ts、可选 package.jsonrslib.config.tstsconfig.json 和源码。目录名通常对应被测能力:

能力示例目录
入口和输出entryoutputoutBaseformat
外部化externalsauto-externalexternal-helpers
bundlelessbundle-falseredirect
样式和资源assetcopyvuepolyfill
语法和转换syntaxdecoratorspreserve-jsxtransform-import
dtsredirect/dts*、plugin-dts tests
特殊格式umdiifeworkermodule-federation
可执行文件exe,单独 project

维护新能力时,优先新增最小 integration case,因为它能验证真实构建产物。

测试辅助工具

tests/scripts/shared.ts 是集成测试核心辅助:

工具用途
runCliSync同步运行 node rslib.js,适合断言退出码和日志
runCli异步运行 CLI,适合 watch 和日志等待
generateBundleEsmConfig快速生成多格式 lib 配置
getResults构建后按 format 收集 JS、CSS、dts 文件和内容
build 类 helper创建 Rslib 实例、执行 build、inspect 并收集结果

tests/scripts/helper.ts 提供轮询文件断言、日志等待和 glob 内容读取。E2E 中 tests/scripts/rsbuild.ts 提供随机端口 dev server,避免端口冲突。

常用命令

场景命令
安装依赖pnpm install
构建所有包pnpm build
构建 examplespnpm build:examples
lint 和 type checkpnpm lint
格式化pnpm format
全量测试pnpm test
单元测试pnpm test:unit
集成测试pnpm test:integration
指定集成 casepnpm test:integration <pattern>
exe 集成测试pnpm test:integration:exe
E2Epnpm test:e2e

CI 工作流

.github/workflows 中主要工作流:

文件作用
lint.ymllint、格式和类型检查
test.yml仓库主要测试
reusable-test.yml可复用测试工作流
ecosystem-ci.yml生态项目验证
benchmark.ymlbenchmark 相关
preview.yml文档或预览相关
release.yml发布流程

修改核心构建行为时,不应只依赖单元测试。需要至少运行相关 integration case,必要时运行 examples 或 ecosystem CI 对应命令。

发布和版本相关

仓库中有 release skill 和 release workflow。发布维护通常涉及:

  • 确认包构建产物。
  • 确认 changelog 或 changeset。
  • 确认 packages/corepackages/plugin-dtspackages/create-rslib 的版本和依赖关系。
  • 运行测试和 lint。
  • 通过 .github/workflows/release.yml 或仓库约定流程发布。

具体发布任务应优先使用仓库的 release skill,而不是手动拼命令。

文档维护

文档站位于 website

  • website/docs/enwebsite/docs/zh 是用户文档源文件。
  • website/theme 是 Rspress 主题和首页组件。
  • website/doc_build 是构建产物,通常不要手动修改。

新增用户可见配置项时,应同步:

  1. packages/core/src/types/config.ts 类型和注释。
  2. 相关运行时默认值。
  3. integration tests。
  4. website/docs 用户文档。
  5. wiki 的维护者说明,如果涉及核心流程或架构。

代码质量约定

仓库采用:

  • TypeScript + ESM。
  • 单引号。
  • Rslint 为 canonical linter。
  • Prettier 为 canonical formatter。
  • 文件名使用 camelCase 或 PascalCase。

pre-commit hook 由 simple-git-hooksnano-staged 驱动:

  • Markdown、CSS、JSON 等运行 Prettier 和 heading-case。
  • JS/TS 类文件运行 Rslint type-check 和 Prettier。

维护检查清单

修改核心构建逻辑时建议检查:

  1. 是否影响所有 format:ESM、CJS、UMD、IIFE、MF。
  2. 是否影响 bundle 和 bundleless 两条路径。
  3. 是否影响 node 和 web target。
  4. 是否影响 JS、CSS、asset、dts 的路径和扩展名一致性。
  5. 是否影响 watch、inspect 或 --lib 裁剪。
  6. 是否需要更新类型注释、用户文档和 integration tests。

修改 dts 逻辑时建议检查:

  1. tsc 普通项目。
  2. composite 或 incremental 项目。
  3. dts.build project references。
  4. dts.bundle API Extractor。
  5. dts.isolated
  6. dts.tsgo
  7. watch 模式和 abortOnError 行为。

修改脚手架时建议检查:

  1. 模板名、目录名和交互选项一致。
  2. JS 和 TS 模板都能生成。
  3. package.json merge 后依赖合理。
  4. 额外工具条件正确。
  5. README、AGENTS.md 和 skills 注入符合预期。