核心是将路径可变部分抽象为结构化数据并用类封装创建逻辑:用set管理合法模块名、map映射模板类型到后缀,pathbuilder类解耦路径生成要素,creator类驱动文件创建,实现高复用与易维护。

用集合存储路径片段、配合类来编写创建工具,核心是把路径的可变部分抽象为结构化数据,再通过类封装创建逻辑,提升复用性与可维护性。关键不在“存路径”,而在“怎么组织路径变化规则”和“如何驱动创建行为”。
用 Set 或 Map 管理路径片段,避免硬编码
路径常由固定前缀 + 可选模块 + 文件类型组成(如 /src/pages/home/index.tsx)。直接拼接字符串易出错、难扩展。推荐用 Set 存储合法模块名、用 Map 映射模板类型到路径后缀:
-
const validPages = new Set(['home', 'user', 'settings'])—— 控制哪些页面允许被创建 -
const templatePaths = new Map([['react', '/index.tsx'], ['vue', '/index.vue']])—— 不同框架对应不同文件结构 - 检查输入时先查
validPages.has(pageName),再查templatePaths.has(framework),失败则提前报错
设计路径生成器类,封装组合逻辑
别让路径拼接散落在命令行参数处理或文件写入处。建一个 PathBuilder 类,把“根目录 + 模块 + 类型 + 后缀”等维度解耦:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 构造时传入项目根路径(如
process.cwd())和基础配置对象 - 提供
forPage(name: string)方法返回新实例,内部校验并缓存模块名 - 提供
withFramework(fw: string)和asComponent()等链式方法,逐步补全路径要素 - 最终调用
build()返回完整绝对路径,例如/my-app/src/pages/user/UserCard.tsx
搭配 Creator 类驱动实际创建动作
PathBuilder 负责“去哪里”,Creator 负责“放什么”。它应持有模板引擎(如 lodash.template 或简单字符串替换)、文件系统操作封装(如 fs-extra),并接收 PathBuilder 输出的路径:
- 构造时注入模板源(如读取
templates/react-component.txt)和变量映射规则(如{ componentName: 'UserCard' }) -
create(path: string)方法自动创建父目录(mkdirp)、渲染模板、写入文件 - 支持批量创建:传入多个
PathBuilder实例,统一执行,避免重复读模板
命令行集成时,用集合做参数校验和提示
在 CLI 层(如用 commander 或 oclif),利用已定义的 Set 提供自动补全和错误提示:
- 选项
--page <name></name>的choices直接设为[...validPages] - 解析参数后,若
page不在集合中,抛出清晰错误:Unknown page: "dashboard". Valid: home, user, settings - 运行
--list-pages时直接打印[...validPages].join(', '),无需额外维护文档字符串
不复杂但容易忽略:集合不是只为去重,更是业务规则的显式声明;类不是为了套设计模式,而是把“路径怎么来”和“文件怎么建”这两件事真正分开,后续加微前端子路径、国际化目录(/locales/zh-CN/)或测试文件(.test.tsx)时,改一处、测一遍,不会牵一发而动全身。










