create-rslib 脚手架系统

系统定位

packages/create-rslib 提供 create-rslib CLI,用于快速创建基于 Rslib 的库项目。它不直接参与 Rslib 构建链路,但决定新用户项目的初始结构、默认配置和可选工具组合。

入口文件是 packages/create-rslib/src/index.ts。底层复用 create-rstackcreate 能力。

模板体系

基础模板列表在 TEMPLATES 中维护:

模板语言场景
node-dual-jsJavaScriptNode ESM 加 CJS 双格式包
node-dual-tsTypeScriptNode ESM 加 CJS 双格式包
node-esm-jsJavaScriptNode 纯 ESM 包
node-esm-tsTypeScriptNode 纯 ESM 包
react-jsJavaScriptReact 组件库
react-tsTypeScriptReact 组件库
vue-jsJavaScriptVue 组件库
vue-tsTypeScriptVue 组件库
svelte-jsJavaScriptSvelte 组件库
svelte-tsTypeScriptSvelte 组件库

用户显式传 --template 时,会调用 parseTemplateName。如果模板名没有以 -ts-js 结尾,默认补 -ts;如果只传 tsjs,会报错。

交互式选择

未传模板时,getTemplateName 会依次询问:

  1. 项目类型:Node pure ESM、Node dual、React、Vue、Svelte。
  2. 语言:TypeScript 或 JavaScript。

最终模板名格式是 {templateName}-{language}

Lint 模板映射

create-rstack 支持 ESLint 和 Rslint 模板映射。Rslib 的映射逻辑是:

项目模板ESLint 模板Rslint 模板
React对应 react-jsreact-ts对应 react-jsreact-ts
Vue对应 vue-jsvue-tsvanilla-jsvanilla-ts
Svelte对应 svelte-jssvelte-tsvanilla-jsvanilla-ts
Nodevanilla-jsvanilla-tsvanilla-jsvanilla-ts

额外工具叠加

extraTools 会在基础模板生成后继续合并工具模板。

React Compiler

条件:模板以 react- 开头。

行为:

  • template-react-compiler/{templateName} 复制文件到目标目录。
  • 合并 package.json。
  • 将工具目录加入 AGENTS.md 搜索目录。

Rspress

条件:模板以 react-ts 开头。

行为:

  • template-rspress/{templateName} 复制文件到目标目录。
  • 合并 package.json。
  • 读取生成项目 package name。
  • 替换 docs/Button.mdxtsconfig.json 中的 {{ packageName }}
  • 将工具目录加入 AGENTS.md 搜索目录。

Storybook

条件:模板以 reactvue 开头。

行为:

  • template-storybook/{templateName} 复制文件到目标目录。
  • 合并 package.json。
  • 将工具目录加入 AGENTS.md 搜索目录。

Agent Skills 注入

脚手架可选择安装以下 skills:

Skill条件
rslib-best-practices总是可选
rstest-best-practices总是可选
rspress-custom-theme选择 Rspress 工具时
rspress-description-generator选择 Rspress 工具时

这些 skills 来自 rstackjs/agent-skills,目的是让新项目天然带有维护和文档生成指导。

维护流程

新增或调整模板时建议按顺序检查:

  1. 更新 TEMPLATES 或交互式选项。
  2. 确认模板目录存在,并包含必要的 package.jsonrslib.config.*rstest.config.*
  3. 如果模板适配 ESLint 或 Rslint,需要更新映射逻辑。
  4. 如果模板可叠加额外工具,确认 extraTools.when 条件和目标目录一致。
  5. 更新 packages/create-rslib/test 中的测试。
  6. 运行 create-rslib 单元测试或针对性生成项目验证。

常见风险

  • 模板名和目录名不一致会导致交互可选但复制失败。
  • 额外工具使用 package.json merge,版本冲突要在模板层处理。
  • Rspress 工具依赖 package name 占位符替换,新增文件中若有占位符也要加入替换列表。
  • 修改 parseTemplateName 会影响 CLI 非交互用法,必须保留默认 ts 的用户体验,除非做 breaking change。