3.1 KiB
3.1 KiB
[recycle] BlockNote Migration Plan v1
更新时间:2026-04-18
1. 目标
这份文档用于冻结从 BlockNote 主路径迁移到 Rust block editor 的最小迁移顺序。
目标不是一次性删除所有旧代码,而是:
- 先让主文档页默认切到新 Rust editor 壳
- 再把 BlockNote 降到 compat/debug
- 最后清理旧依赖和主线耦合
2. 当前盘点
当前主路径仍直接依赖下面这些入口或依赖:
@blocknote/core@blocknote/react@blocknote/mantineblocknote-editor.tsxschema.tsHocuspocusProviderYjs
主路径宿主文件主要是:
wolai-frontend/src/components/editor/document-content.tsxwolai-frontend/src/components/editor/blocknote-editor.tsxwolai-frontend/src/components/editor/schema.ts
3. 迁移分层
迁移固定分三层:
- 主路径 由 Rust block editor 接管
- compat 保留旧 BlockNote 入口,供临时回退
- debug 保留最小诊断入口,帮助排障
禁止继续把 BlockNote 当成默认编辑器。
4. 内容格式迁移策略
第一阶段不要求一次性消灭所有旧内容格式。
固定策略如下:
- 主写链以 Rust editor command 和 Rust document model 为准
- 旧 BlockNote JSON 通过兼容 codec 读取
- 写回时优先生成 Rust 侧统一结构
- 必要时保留从旧格式到新格式的单向迁移适配
重点对象:
- 段落
- 标题
- list/todo
pageReferenceblockReference- 附件和重型自定义块
5. 入口切换顺序
第一步:
- 在文档页入口切到
mnoteWebDocumentShellEnabled - 默认走
mnote-web /document - 保留
?editor=compat回退参数
第二步:
document-content.tsx继续保留为 compat 宿主壳blocknote-editor.tsx继续保留为 compat 编辑器实现
第三步:
- 新主编辑器稳定后,再把主路径对
schema.ts、HocuspocusProvider、Yjs的依赖收缩到 compat/debug
6. 依赖收敛
迁移完成前后要明确区分:
- 主路径是否仍依赖
@blocknote/core - 主路径是否仍依赖
blocknote-editor.tsx - 主路径是否仍依赖
HocuspocusProvider - 主路径是否仍依赖
Yjs
最终要求:
- compat/debug 允许暂时保留
- 主路径不再依赖以上能力
7. 风险
主要风险如下:
- 旧页面内容与新结构双写不一致
- history / snapshot / TOC / stats 边界退化
- 重型块在新主路径下缺少最小宿主能力
- 回退入口不明确导致线上排障困难
8. 回退策略
必须保留显式回退:
- 文档页参数级 compat 入口
- 旧 BlockNote 组件继续可挂载
- debug 场景可直接验证旧壳
在没有确认新主路径稳定前,不得直接删除 compat/debug。
9. 验收标准
满足以下条件即可视为 migration v1 达标:
- 主文档页默认落到新 Rust editor 壳
- compat/debug 入口仍可独立使用
blocknote-editor.tsx不再是默认主路径schema.ts不再决定默认主编辑器@blocknote/coreblocknote-editor.tsxschema.tsHocuspocusProviderYjs已被明确标记为 compat/debug 或待删除对象