🏗️ 项目架构
本项目采用 pnpm workspace(也称为 monorepo)进行结构化管理。这种方法允许我们在单个代码仓库中维护多个独立的包,从而简化了依赖管理和跨包开发。
什么是 Monorepo?
Monorepo(“mono” 意为“单一”,“repo” 意为“仓库”)是一种软件开发策略,即将许多项目的代码存储在同一个仓库中。本项目使用它来统一管理 swiftcode CLI 及其相关包(Swagger2Interface, Template2List, Utils)。
核心结构
项目根目录包含几个关键的配置文件和目录:
package.json:swiftcodeCLI 工具的主清单文件。它定义了入口点 (bin/index.js) 并协调整个工作空间。pnpm-workspace.yaml: 此文件定义了 pnpm 工作空间的根目录,并告诉 pnpm 在哪里可以找到子包(在我们的例子中,是packages/*目录)。bin/index.js: 命令行界面(CLI)的可执行入口点。当您在终端中执行swiftcode时,运行的就是这个脚本。packages/: 此目录包含构成 SwiftCode 工具集的所有独立、可发布的包。
🚀 CLI: bin/index.js
项目的核心是 swiftcode 命令。bin/index.js 文件负责:
- 命令解析: 使用
commander.js定义可用的命令(例如swagger,template)。 - 用户交互: 使用
inquirer提示用户输入,例如选择 swagger 源或模板文件。 - 任务编排: 根据用户输入,调用相应包(
@swiftcode/api,@swiftcode/list)中的功能来执行所请求的操作。
📦 Packages (核心包)
packages/ 目录承载了核心逻辑,每个子目录都是一个自包含的 NPM 包。
1. Swagger2Interface (@swiftcode/api)
- 目的: 这是将 Swagger/OpenAPI 定义转换为 TypeScript 接口的引擎。
- 关键文件:
src/transformers/apiGetDefinitions.ts: 获取 API 规范。src/transformers/convertJsonToTsType.ts: 将 JSON schema 转换为 TypeScript 类型定义。src/transformers/renderInterfaceFile.ts: 将生成的类型写入.ts文件。
- 交互: 当用户想要生成 API 类型时,CLI 会使用这个包。
2. Template2List (@swiftcode/list)
- 目的: 此包设计用于从 JavaScript 对象模板快速生成前端的列表/表格视图。
- 关键文件:
src/transformers/transfromTemplate.ts: 读取用户提供的模板文件。src/transformers/transformFilter.ts: 为筛选/搜索区域生成代码。src/transformers/transformTable.ts: 为数据表格生成代码。src/transformers/sfcMaterial.ts: 将各个部分组装成最终的单文件组件。
- 交互: CLI 使用此包基于模板创建新的前端组件。
3. Utils (@swiftcode/utils)
- 目的: 一个共享的实用工具库,供 monorepo 中的其他包使用。
- 关键文件:
src/common-tools.ts: 通用辅助函数。src/format-tools.ts: 代码格式化工具。src/node-tools.ts: 文件系统操作。
- 交互:
Swagger2Interface和Template2List都依赖此包来执行常见任务。