版本: v1.0 最后更新: 2026-04-03 受众: 开发者、架构师 阅读时间: 20 分钟
PostWaver 采用模块化 Monorepo 架构,将系统分为多个独立但协作的包。本文档详细说明了系统的架构设计、各层的职责以及包之间的关系。
每个包专注于单一职责:
高层模块不依赖低层模块,都依赖抽象:
┌─────────────────────────────────────────────────────────┐
│ 应用层 (Application) │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Web UI │ │ Converter Web │ │
│ │ (React) │ │ (React) │ │
│ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 引擎层 (Engine) │
│ ┌────────────────────────────────────────────────┐ │
│ │ Engine (Hono.js) │ │
│ │ - API 服务器 │ │
│ │ - 工作流编排 │ │
│ │ - 预览系统 │ │
│ └────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 业务层 (Business) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Core │ │ Linker │ │Transform │ │
│ │ 解析/扫描 │ │ 关系生成 │ │ 平台转换 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 数据层 (Data) │
│ ┌──────────┐ ┌──────────┐ │
│ │ Database │ │ Config │ │
│ │(Prisma) │ │ Manager │ │
│ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 存储层 (Storage) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ SQLite │ │ Markdown │ │ Hexo │ │
│ │ (元数据) │ │ (内容) │ │ (博客) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────┘
职责: 用户界面和交互
组件:
职责: 工作流编排和 API 服务
组件:
职责: 核心业务逻辑
组件:
职责: 数据持久化和配置管理
组件:
职责: 底层存储
组件:
┌─────────────┐
│ web-ui │
│ converter-web│
└──────┬──────┘
│
┌──────▼──────┐
│ engine │
└──────┬──────┘
│
┌──────────────────┼──────────────────┐
│ │ │
┌───────▼────────┐ ┌───────▼────────┐ ┌──────▼─────┐
│ core │ │ linker │ │transformer │
└───────┬────────┘ └───────┬────────┘ └──────┬─────┘
│ │ │
└──────────────────┼──────────────────┘
│
┌──────▼──────┐
│ config │
└──────┬──────┘
│
┌──────▼──────┐
│ database │
└─────────────┘
| 包 | 职责 | 主要依赖 | 输出 |
|---|---|---|---|
| core | 内容解析、扫描、注入 | database, linker | 解析后的内容、元数据 |
| linker | 内容关系生成 | database | 相关文章列表 |
| transformer | 平台格式转换 | 无 | 平台特定格式 |
| adapter | 平台 API 适配 | 无 | API 调用结果 |
| database | 数据持久化 | 无 | CRUD 操作 |
| config | 配置管理 | 无 | 配置对象 |
| engine | 工作流编排、API | core, transformer, adapter, database, config | API 响应 |
| web-ui | React 界面 | engine | UI 组件 |
| converter-web | 独立转换工具 | transformer | 转换结果 |
┌─────────────┐
│ 用户写作 │
│ Markdown │
└──────┬──────┘
↓
┌─────────────┐
│ 扫描内容 │ ← core/scanner
│ 生成 frontmatter │
└──────┬──────┘
↓
┌─────────────┐
│ 解析内容 │ ← core/parser
│ 提取图片 │
└──────┬──────┘
↓
┌─────────────┐
│ 生成关系 │ ← linker
│ 相关文章 │
│ 前后篇 │
└──────┬──────┘
↓
┌─────────────┐
│ 存储元数据 │ ← database
│ SQLite DB │
└──────┬──────┘
↓
┌─────────────┐
│ 平台转换 │ ← transformer
│ 格式适配 │
└──────┬──────┘
↓
┌─────────────┐
│ 上传图片 │ ← adapter
│ (如果需要) │
└──────┬──────┘
↓
┌─────────────┐
│ 发布到平台 │ ← adapter/engine
│ 或同步博客 │
└─────────────┘
Markdown 文件 → Scanner → Frontmatter 生成 → 数据库存储
Markdown → Parser → AST → 提取内容/图片
数据库查询 → Linker → 关系计算 → 相关文章列表
通用内容 → Transformer → 平台特定格式
转换后内容 → 模板注入 → Hexo 博客 → Git 提交
| 技术 | 版本 | 用途 |
|---|---|---|
| React | 18.2.0 | UI 框架 |
| React Router | 6.21.0 | 路由管理 |
| Vite | 5.0.11 | 构建工具 |
| TypeScript | 5.3.3 | 类型系统 |
| Tailwind CSS | Latest | 样式框架 |
| 技术 | 版本 | 用途 |
|---|---|---|
| Node.js | 18+ | 运行时 |
| Hono.js | Latest | Web 框架 |
| Prisma | 5.22.0 | ORM |
| SQLite | 3.x | 数据库 |
| 技术 | 版本 | 用途 |
|---|---|---|
| unified | 11.0.5 | 统一处理接口 |
| remark | 15.0.1 | Markdown 解析 |
| remark-html | 16.0.1 | Markdown 转 HTML |
| gray-matter | 4.0.3 | Frontmatter 解析 |
| juice | - | CSS 内联化(WeChat) |
| 工具 | 版本 | 用途 |
|---|---|---|
| pnpm | 8+ | 包管理器 |
| ESLint | Latest | 代码检查 |
| Prettier | Latest | 代码格式化 |
| Vitest | Latest | 测试框架 |
| TypeScript | 5.3.3 | 类型检查 |
实现位置: packages/transformer/src/
步骤:
Transformer 接口adapter 中实现平台 API(如需要)实现位置: packages/core/src/
步骤:
Injector 接口实现位置: packages/database/prisma/schema.prisma
步骤:
实现位置: packages/engine/src/
步骤:
最后更新: 2026-04-03 维护者: PostWaver Team 反馈: GitHub Issues