项目总览

项目定位

Rslib 是基于 Rsbuild 和 Rspack 的库构建工具。它面向 npm 库、组件库、Node 包、Module Federation 远程模块和部分实验性可执行程序场景,核心目标是在 Rsbuild 的应用构建能力之上提供更适合“库产物”的默认配置、格式抽象、bundleless 输出、声明文件生成和脚手架体验。

仓库采用 pnpm workspace 组织,核心逻辑集中在 packages/core,声明文件能力拆分到 packages/plugin-dts,项目初始化能力位于 packages/create-rslib。集成测试和端到端测试在 tests 下覆盖输出格式、外部化、bundleless、CSS、资源、Vue、React、Module Federation、可执行文件等行为。

技术栈

分类技术用途
语言TypeScript、ESM包源码、测试和配置文件
包管理pnpm workspace管理 monorepo 依赖和脚本
构建底座Rsbuild、Rspack将 Rslib 配置转成多环境 bundler 配置并执行构建
CLIcac实现 rslib buildinspectmf-dev
声明文件TypeScript Compiler API、tsgo、Rspack isolated dts、API Extractor生成和打包 .d.ts
测试Rstest、Playwright单元、集成、E2E 测试
文档站Rspress维护官网和用户文档
代码质量Rslint、Prettier、heading-caselint、格式化和标题规范

顶层目录

包职责

路径主要职责对外入口
@rslib/corepackages/coreCLI、配置加载、Rsbuild environment 生成、构建和 inspect APIrslib bin、createRslibbuilddefineConfigloadConfig
rsbuild-plugin-dtspackages/plugin-dts作为 Rsbuild 插件生成声明文件,支持 bundle、isolated、tsgo 和 tsc 后端pluginDts
create-rslibpackages/create-rslib通过模板创建新项目,并可叠加 Rspress、Storybook、React Compiler 和 agent skillscreate-rslib CLI

核心系统地图

设计理念

Rslib 的核心思路不是重新实现一个 bundler,而是把“库构建”中常见但容易踩坑的策略沉淀为 Rsbuild 环境配置。用户仍然可以使用 Rsbuild 生态的插件、source、output、tools 等能力,但 Rslib 会围绕 lib 数组为每个目标格式生成独立 environment,并补齐库构建所需的默认值。

几个关键设计取舍:

决策选择而不是原因
构建底座复用 Rsbuild 和 Rspack自研完整 bundler保留成熟编译链、插件生态和性能优势
多格式输出lib 数组映射到 Rsbuild environments单配置内手动切换格式便于 ESM、CJS、UMD、IIFE、MF 并行构建和按 --lib 裁剪
声明文件独立 rsbuild-plugin-dts内联在 core 中降低核心包职责,便于独立演进 dts 后端
bundleless用 Rspack entry 和 externals 重写保持源码结构简单复制文件仍可经过 loader、CSS、资源和路径重写流程
用户覆盖内置配置、派生配置、用户配置按优先级合并完全黑盒默认值维护默认体验的同时允许高级用户覆盖底层配置

维护边界

  • packages/core 决定“用户配置如何变成构建配置”,修改时必须考虑格式矩阵和 bundle/bundleless 双路径。
  • packages/plugin-dts 决定“声明文件如何生成和后处理”,修改时必须考虑 tsc、tsgo、isolated、bundle 和 watch 行为。
  • packages/create-rslib 决定“新项目长什么样”,修改模板时应同步检查模板测试和 README。
  • tests/integration 是行为契约的主要来源,新增核心行为通常应增加或更新 integration case。