系统架构
总体分层
Rslib 的运行时架构可以分为五层:
架构图
配置模型
Rslib 的顶层配置继承 Rsbuild 配置,同时要求 lib 是非空数组。每个 lib 是一个“库目标”,常见字段包括:
packages/core/src/types/config.ts 是维护配置类型的主文件。类型注释中也维护了很多默认值说明,修改运行时默认值时需要同步类型注释和用户文档。
多 Environment 模型
Rslib 使用 Rsbuild environments 表达多格式输出。composeRsbuildEnvironments 的流程是:
composeCreateRsbuildConfig遍历lib数组。- 每个
lib与共享 Rsbuild 配置合并。 composeLibRsbuildConfig根据格式、target、bundle、entry、dts 等字段生成派生配置。- 内置常量配置、派生配置和用户配置合并成最终 environment config。
- 生成 environment id,并检查重复 id。
配置合并优先级
composeCreateRsbuildConfig 明确保留了合并顺序:
这个顺序很重要:派生配置需要覆盖部分内置默认值,而用户仍应能覆盖大多数底层 Rsbuild 配置。维护时不要随意调整合并顺序,否则会改变用户配置的优先级契约。
插件与生命周期
Rslib 主要复用 Rsbuild 插件机制:
数据流和产物流
关键维护原则
- 修改
config.ts时要同时考虑 format、target、bundle、multi compiler 和--lib裁剪。 - 修改 externals 顺序要谨慎。当前顺序是 warn、用户 externals、auto external、target externals、bundleless externals,bundleless 重写依赖前面步骤先放行或命中。
- 修改 dts 插件时要分别验证普通 tsc、composite、build、watch、bundle、isolated 和 tsgo 分支。
- 修改输出文件名或扩展名时要同时检查 JS、CSS、asset、dts redirect,避免 bundleless import 指向不存在的文件。