前端开发
从其他 CMS 或内容系统迁移/replatform 到…
当需要把 AEM、Contentful、Strapi、Webflow、WordPress、Payload、Drupal、Markdown/MDX/frontmatter、WXR/XML、CMS API、数据库转储或静态 HTML 迁移到 Sanity 时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
从其他 CMS 或内容系统迁移/repl特定
解决思路
- 把 CMS 到 Sanity 的迁移当作内容策略和 ETL 项目,而不是盲目 lift-and-shift。
- 先阅读 `references/general.md`。
- 如果源平台是 AEM/Adobe Experience Manager,读取 `references/aem.md`。
- 如果源平台是 Contentful,读取 `references/contentful.md`。
- 如果源平台是 Strapi,读取 `references/strapi.md`。
- 如果源平台是 Webflow,读取 `references/webflow.md`。
- 如果源平台是 WordPress/WXR/Elementor,读取 `references/wordpress.md`。
- 如果源平台是 Payload,读取 `references/payload.md`。
- 如果源平台是 Drupal,读取 `references/drupal.md`。
- 如果源平台是 Markdown/MDX/frontmatter 文件,读取 `references/markdown.md`。
- 在写代码之前,产出简短迁移计划,覆盖源访问、内容范围、schema 决策、抽取、转换、导入、验证、重定向和切换。
- 对真实迁移优先使用确定性、可重复脚本;编写并审查迁移脚本、映射和验证检查;不要依赖一次性内容操作处理大内容量。
- 对于实现或规划任务,产出以下工件,或解释为何不需要。
- 产出内容清单:源类型、数量、语言环境、状态/草稿范围、资产和关系类型。
- 产出源到 Sanity 映射:文档类型、对象类型、引用、Portable Text 字段、资产字段、ID 和被跳过内容。
- 产出抽取方式:所需凭据/访问、API/导出命令、原始快照位置和已知盲点。
- 产出转换/导入计划:确定性 ID、写入顺序、资产处理、富文本转换、验证和重跑策略。
- 产出切换计划:增量同步/内容冻结、重定向、断链检查、SEO 元数据和手动清理。
- 使用从源 ID、slug、路径或哈希派生的稳定文档 ID。
- 使用 `createOrReplace`、`createIfNotExists` 或 `sanity datasets import --replace`,使重跑收敛。
- 转换前将抽取的源数据快照到磁盘。
- 先导入或创建被引用文档,再导入引用它们的文档。
- 将富文本转换为 Portable Text,而不是存储原始 HTML 或 Markdown 字符串。
- 将资产上传到 Sanity 或 Media Library;不要让生产内容依赖旧 CDN URL。
- 跟踪每文档质量问题,并在切换前生成验证摘要。
- 保留旧 URL 和源 ID,用于重定向、QA 和未来调试。
- 对内容本身建模,而不是对旧站点如何渲染它建模。
- 可复用或独立管理的实体用文档;由单个文档拥有的内容用对象。
- 编写 Sanity schema 时使用 `defineType`、`defineField` 和 `defineArrayMember`。
- 使用 image/file 字段搭配已上传的 Sanity 资产或 Media Library 资产,而不是旧 CDN URL。
- 富文本和自定义块使用 Portable Text 数组;不要把原始 HTML 存为规范正文。
- 当项目使用 TypeScript 时,在 schema 或 GROQ 查询变更后运行 schema extraction 和 TypeGen。
- 对目标 dataset 使用 MCP/content 工具前,先部署或应用 schema 变更。
- 如需更深入的 Sanity 实现指导,若已安装 `sanity-best-practices` 则使用它。
- 若未安装 `sanity-best-practices`,告知用户可用 `npx skills add sanity-io/agent-toolkit --skill sanity-best-practices` 添加。
- 当源访问路径、凭据、导出文件或数据库连接不明确时,编码前停止并询问。
- 当目标 Sanity 项目/dataset 或是否应使用临时 dataset 不明确时,编码前停止并询问。
- 当草稿、归档、定时、语言环境或版本历史范围不明确时,编码前停止并询问。
- 当媒体文件是否应迁移,以及资产 URL/文件是否可访问不明确时,编码前停止并询问。
- 当目标 schema 已存在,还是应作为迁移的一部分设计不明确时,编码前停止并询问。
- 不要为源支持的文档创建随机 ID。
- 不要先获取再创建被引用文档;使用确定性 ID 和 `createIfNotExists`/`createOrReplace`。
- 当 NDJSON 或脚本合适时,不要通过 MCP content 工具运行批量迁移。
- 除非要求,不要把语言环境回退值扁平化为翻译。
- 不要为必需媒体、作者、引用或富文本转换留下 TODO。
- 没有数量检查、样本检查、引用检查和路由/重定向检查,不要宣布迁移完成。
- 使用 `references/general.md` 了解共享迁移原则,并使用平台参考了解源特定抽取路径、建模陷阱和验证检查。
- 对未明确覆盖的源系统,应用 `references/general.md` 并适配最接近的平台模式。
- API-first CMS:从 Contentful、Strapi 或 Payload 开始。
- 单体/page-builder 系统:从 WordPress、Drupal、Webflow 或 AEM 开始。
- HTML 重的导出:从 WordPress 和 Webflow 富文本指导开始。
- Markdown-first 源:从 `references/markdown.md` 开始。
适用边界 · 注意事项
- 当源访问路径、凭据、导出文件或数据库连接,目标 Sanity 项目/dataset,草稿/归档/定时/语言环境/版本范围,媒体迁移范围,或目标 schema 等关键信息不明确时,不要开始编码。
- 不适用于非 Sanity 目标,或没有 Sanity 项目/dataset、schema、Media Library、MCP/content 工具等目标环境的迁移。
- 不适合把迁移当作盲目 lift-and-shift,或用一次性内容操作处理大内容量。