Package 概览
按 Core、History、Thread Comment、Worktree、File 与 Office Exchange 了解 Collaboration SDK 的公开 package。
本页是 Collaboration SDK 的选包地图。先组装 Core Collaboration,再按产品需求增加扩展模块;不需要 一次安装所有 package。
Database Adapter、File 与 Office Exchange 的服务端 package 以 Apache-2.0 开源,源码见 univer-collaboration-sdk-community。 它们与其他 package 使用相同的包名前缀和版本,安装方式相同。
Core Collaboration
Core Collaboration 提供浏览器协同、服务端协议、OT、revision 与持久化主链路。
| 运行位置 | Package | 主要作用 |
|---|---|---|
| Browser | @univerjs-pro/collaboration | 注册浏览器协同基础能力 |
| Browser | @univerjs-pro/collaboration-client | 加载 Unit、提交 changeset 并维持实时同步 |
| Browser | @univerjs-pro/collaboration-client-ui | 提供协同状态相关 UI 与样式 |
| Server | @univerjs-pro/collaboration-transport-node | 接收 Node.js HTTP 与 WebSocket 流量 |
| Server | @univerjs-pro/collaboration-endpoint | 实现 Client 协议、Session、Room 与 Presence |
| Server | @univerjs-pro/collaboration-service | 管理 Unit、OT、revision 与核心 Service API |
| Database | @univerjs-pro/collaboration-database-memory | 进程内存储,用于测试、示例和临时开发 |
| Database | @univerjs-pro/collaboration-database-sqlite | SQLite 持久化,用于开发、测试、本地和小规模场景 |
| Database | @univerjs-pro/collaboration-database-postgres | PostgreSQL 持久化,多个节点共用一个数据库 |
| Multi-node | @univerjs-pro/collaboration-cluster-redis | 基于 Redis 的 pub/sub 适配器与 Session Ticket 存储,用于多节点部署 |
Core Server 需要 Transport、Endpoint、Service 和一个 Database Adapter。Memory、SQLite 与 PostgreSQL 是同一
Adapter 合同的三种实现,通常只选择其中一个。多节点部署时,还需要一个 pub/sub 适配器和一个共享的
Session Ticket 存储。两者的合同(IPubSubAdapter、ISessionTicketStore)由 Endpoint 定义,SDK 提供 Redis 实现。
History
History 从 Core 的 Unit 创建和 changeset commit Event 建立版本历史索引。
| 运行位置 | Package | 主要作用 |
|---|---|---|
| Browser | 复用 Core Client/UI | 展示和读取历史入口 |
| Server | @univerjs-pro/collaboration-history-service | 建立并查询历史索引 |
| Server | @univerjs-pro/collaboration-history-endpoint | 向 Client 提供 History 协议能力 |
| Database | @univerjs-pro/collaboration-history-database-memory | History 索引的进程内存储实现 |
| Database | @univerjs-pro/collaboration-history-database-sqlite | History 索引的 SQLite 持久化实现 |
History 数据是可重建的派生索引,Core changeset 仍是 Unit 内容的权威来源。
Thread Comment
Thread Comment 管理 Sheet 与 Doc 的评论正文、回复和 solved 状态。
| 运行位置 | Package | 主要作用 |
|---|---|---|
| Browser | 复用 Core Collaboration package | 使用评论 Client 与 UI 能力 |
| Server | @univerjs-pro/collaboration-comment-service | 管理评论操作与 commentCommitted Event |
| Server | @univerjs-pro/collaboration-comment-endpoint | 提供评论协议并复用 Unit Room 发布更新 |
| Database | @univerjs-pro/collaboration-comment-database-memory | 评论的进程内存储实现 |
| Database | @univerjs-pro/collaboration-comment-database-sqlite | 评论的 SQLite 持久化实现 |
Comment Adapter 保存评论数据;随内容变化的 anchor 仍属于 Core snapshot 与 changeset。
Worktree
Worktree 提供隔离 draft、状态流转与逐 Unit 合入。
| 运行位置 | Package | 主要作用 |
|---|---|---|
| Browser | @univerjs-pro/collaboration-worktree-client | 连接 Worktree draft、状态与合入能力 |
| Server | @univerjs-pro/collaboration-worktree-service | 管理 draft changeset、状态和 merge |
| Server | @univerjs-pro/collaboration-worktree-endpoint | 向 Worktree Client 提供协议能力 |
| Database | @univerjs-pro/collaboration-worktree-database-memory | Worktree 的进程内存储实现 |
| Database | @univerjs-pro/collaboration-worktree-database-sqlite | Worktree 的 SQLite 持久化实现 |
Worktree Service 最终通过 Core Service 合入 trunk,因此两套 Service 的 Middleware 都需要按边界配置。
File
File 保存 Univer 客户端上传的二进制文件:插入 Unit 的图片与附件,以及导入导出的源文件和结果文件。Unit 数据只记录文件 ID。
| 运行位置 | Package | 主要作用 |
|---|---|---|
| Browser | 复用 Core Collaboration Client | 上传图片与附件,按文件 ID 换取下载地址 |
| Server | @univerjs-pro/collaboration-file-service | 执行文件归属规则、Middleware 与临时文件清理 |
| Server | @univerjs-pro/collaboration-file-endpoint | 提供上传、下载地址签发与下载路由 |
| Database | @univerjs-pro/collaboration-file-memory | 元数据与内容的进程内存储 |
| Database | @univerjs-pro/collaboration-file-database-sqlite | 文件元数据的 SQLite 持久化 |
| Database | @univerjs-pro/collaboration-file-database-postgres | 文件元数据的 PostgreSQL 持久化 |
| Storage | @univerjs-pro/collaboration-file-blob-local | 文件内容保存在本地目录 |
| Storage | @univerjs-pro/collaboration-file-blob-s3 | 文件内容保存在 S3 兼容对象存储,可签发直链 |
元数据与内容是两个独立合同,可以分别选择实现,例如元数据放数据库、内容放对象存储。
Office Exchange
Office Exchange 在 Office 文件与协同 Unit 之间导入导出,源文件与结果文件由 File 保存。
| 运行位置 | Package | 主要作用 |
|---|---|---|
| Browser | @univerjs-pro/exchange-client | 提供浏览器文件交换基础能力 |
| Browser | @univerjs-pro/sheets-exchange-client | 提供 Sheet 文件导入导出能力 |
| Server | @univerjs-pro/collaboration-exchange-service | 管理导入导出 task、Middleware 与 Unit 的创建和读取 |
| Server | @univerjs-pro/collaboration-exchange-endpoint | 提供导入、导出与 task 查询路由 |
| Server | @univerjs-pro/exchange-node | 在 Node.js 中转换 Office 文件与 Univer 数据 |
Exchange Service 通过 Core Service 创建和读取 Unit,通过 File Service 读写文件,因此与 Core 和 File 一起组装。
选择规则
- 从 Quick Start 的 Core package 开始。
- 在 Memory、SQLite、PostgreSQL 与自定义实现中选择一个 Core Database Adapter。
- 多节点部署时,加上 Redis 的 pub/sub 适配器与 Session Ticket 存储。
- 只安装产品实际启用的扩展模块 package。
- 需要图片、附件或导入导出时,先组装 File,再按需加入 Office Exchange。
- 即使多个模块使用同一个数据库,也要分别创建各自的 Adapter。
你觉得这篇文档如何?