Skip to content

架构设计

了解 DocsJS 核心架构和设计决策。

三层架构

DocsJS 采用 PicGo 风格的三层架构:

┌─────────────────────────────────────────────────────────────────────┐
│                          平台层                                    │
│  CLI + API + GUI + 配置管理 + 插件注册                            │
├─────────────────────────────────────────────────────────────────────┤
│                         适配器层                                   │
│  DOCX 解析器 ←→ DocumentAST ←→ HTML/MD/JSON 渲染器               │
├─────────────────────────────────────────────────────────────────────┤
│                          核心引擎                                  │
│  AST v2 + 管道 + 插件编排器 + 安全                               │
└─────────────────────────────────────────────────────────────────────┘

平台层

顶层提供用户界面:

  • CLI - 批处理命令行工具
  • API - REST 和编程接口
  • GUI - 可视化编辑器和管理界面
  • 配置管理 - 配置处理行为
  • 插件注册 - 发现和管理插件

适配器层

中间层处理格式转换:

DOCX 解析器

将 .docx 文件解析为内部 AST:

  • 提取文档结构
  • 解析样式和格式
  • 处理嵌入资源(图片、图表)
  • 保留语义元素

DocumentAST

核心抽象语法树:

  • 框架无关的表示
  • 保留所有文档语义
  • 支持增量更新
  • 支持高效转换

渲染器

将 AST 转换为输出格式:

  • HTML 渲染器 - Web 就绪输出
  • Markdown 渲染器 - 文档友好格式
  • JSON 渲染器 - 编程访问

核心引擎

基础层驱动所有功能:

AST v2

增强的抽象语法树:

ts
interface DocumentNode {
  type: string;
  children?: DocumentNode[];
  attributes?: Record<string, unknown>;
  content?: string;
}

管道

处理管道编排转换:

  1. 解析 - 将输入转换为 AST
  2. 转换 - 应用修改
  3. 渲染 - 生成输出
  4. 导出 - 准备最终结果

插件编排器

管理插件生命周期:

  • 注册和验证
  • 钩子执行
  • 权限强制
  • 错误处理

安全

内置安全措施:

  • 插件沙箱
  • 权限系统
  • 内容净化
  • 资源限制

数据流

输入 (DOCX/HTML/剪贴板)

┌─────────────────┐
│   解析器        │ → beforeParse/afterParse 钩子
└─────────────────┘

┌─────────────────┐
│   AST           │ → beforeTransform/afterTransform 钩子
└─────────────────┘

┌─────────────────┐
│   渲染器        │ → beforeRender/afterRender 钩子
└─────────────────┘

┌─────────────────┐
│   导出器        │ → beforeExport/afterExport 钩子
└─────────────────┘

输出 (HTML/MD/JSON)

关键设计决策

1. AST 中心

所有操作通过 AST 进行:

  • 单一数据源
  • 支持强大的转换
  • 便于调试
  • 支持增量更新

2. 插件优先

可扩展性是核心设计:

  • 8 个生命周期钩子
  • 细粒度权限
  • 沙箱执行
  • 丰富的上下文 API

3. 配置驱动

通过配置文件控制行为:

  • 预构建常见用例
  • 可定制特定需求
  • 运行时可切换
  • 可组合设置

4. 安全意识

安全不是事后考虑:

  • 最小权限原则
  • 沙箱插件执行
  • 内容净化
  • 审计能力

性能考虑

  • 流式处理 - 高效处理大文档
  • 缓存 - 缓存解析结果
  • 懒加载 - 按需加载插件
  • Tree Shaking - 只包含需要的代码

下一步

基于 MIT 许可发布。