create-rslib 脚手架系统
系统定位
packages/create-rslib 提供 create-rslib CLI,用于快速创建基于 Rslib 的库项目。它不直接参与 Rslib 构建链路,但决定新用户项目的初始结构、默认配置和可选工具组合。
入口文件是 packages/create-rslib/src/index.ts。底层复用 create-rstack 的 create 能力。
模板体系
基础模板列表在 TEMPLATES 中维护:
用户显式传 --template 时,会调用 parseTemplateName。如果模板名没有以 -ts 或 -js 结尾,默认补 -ts;如果只传 ts 或 js,会报错。
交互式选择
未传模板时,getTemplateName 会依次询问:
- 项目类型:Node pure ESM、Node dual、React、Vue、Svelte。
- 语言:TypeScript 或 JavaScript。
最终模板名格式是 {templateName}-{language}。
Lint 模板映射
create-rstack 支持 ESLint 和 Rslint 模板映射。Rslib 的映射逻辑是:
额外工具叠加
extraTools 会在基础模板生成后继续合并工具模板。
React Compiler
条件:模板以 react- 开头。
行为:
- 从
template-react-compiler/{templateName}复制文件到目标目录。 - 合并 package.json。
- 将工具目录加入 AGENTS.md 搜索目录。
Rspress
条件:模板以 react-ts 开头。
行为:
- 从
template-rspress/{templateName}复制文件到目标目录。 - 合并 package.json。
- 读取生成项目 package name。
- 替换
docs/Button.mdx和tsconfig.json中的{{ packageName }}。 - 将工具目录加入 AGENTS.md 搜索目录。
Storybook
条件:模板以 react 或 vue 开头。
行为:
- 从
template-storybook/{templateName}复制文件到目标目录。 - 合并 package.json。
- 将工具目录加入 AGENTS.md 搜索目录。
Agent Skills 注入
脚手架可选择安装以下 skills:
这些 skills 来自 rstackjs/agent-skills,目的是让新项目天然带有维护和文档生成指导。
维护流程
新增或调整模板时建议按顺序检查:
- 更新
TEMPLATES或交互式选项。 - 确认模板目录存在,并包含必要的
package.json、rslib.config.*、rstest.config.*。 - 如果模板适配 ESLint 或 Rslint,需要更新映射逻辑。
- 如果模板可叠加额外工具,确认
extraTools.when条件和目标目录一致。 - 更新
packages/create-rslib/test中的测试。 - 运行 create-rslib 单元测试或针对性生成项目验证。
常见风险
- 模板名和目录名不一致会导致交互可选但复制失败。
- 额外工具使用 package.json merge,版本冲突要在模板层处理。
- Rspress 工具依赖 package name 占位符替换,新增文件中若有占位符也要加入替换列表。
- 修改
parseTemplateName会影响 CLI 非交互用法,必须保留默认ts的用户体验,除非做 breaking change。