# [recycle] BlockNote Migration Plan v1 > 更新时间:2026-04-18 ## 1. 目标 这份文档用于冻结从 BlockNote 主路径迁移到 Rust block editor 的最小迁移顺序。 目标不是一次性删除所有旧代码,而是: - 先让主文档页默认切到新 Rust editor 壳 - 再把 BlockNote 降到 compat/debug - 最后清理旧依赖和主线耦合 ## 2. 当前盘点 当前主路径仍直接依赖下面这些入口或依赖: - `@blocknote/core` - `@blocknote/react` - `@blocknote/mantine` - `blocknote-editor.tsx` - `schema.ts` - `HocuspocusProvider` - `Yjs` 主路径宿主文件主要是: - `wolai-frontend/src/components/editor/document-content.tsx` - `wolai-frontend/src/components/editor/blocknote-editor.tsx` - `wolai-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 - `pageReference` - `blockReference` - 附件和重型自定义块 ## 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/core` - `blocknote-editor.tsx` - `schema.ts` - `HocuspocusProvider` - `Yjs` 已被明确标记为 compat/debug 或待删除对象