mcpField
P
portable-text-conversion

portable-text-conversion

github.com/sanity-io数据与数据库1942.8k 次安装1 天前更新
代码仓库

关于 portable-text-conversion

介绍如何将外部内容转换为 Sanity Portable Text,帮助开发者选择 Markdown 或 HTML 转换方式,也可根据其他来源手动构建 Portable Text 块。

主要功能

  1. 01使用 markdownToPortableText 转换 Markdown
  2. 02使用 htmlToBlocks 转换 HTML
  3. 03手动构建 Portable Text 块
  4. 04说明块、片段、标记和列表结构
  5. 05按来源格式提供转换规则

适用场景

  1. 01将 Markdown 内容迁移到 Sanity
  2. 02在内容迁移中转换 HTML
  3. 03从 API 或数据库构建 Portable Text

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sanity-io/agent-toolkit --skill portable-text-conversion

安装后在 Claude Code 中输入/portable-text-conversion确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

rules/
html-to-pt.md
manual-construction.md
markdown-to-pt.md

详细介绍

便携文本转换

将外部内容(HTML、Markdown)转换为 Sanity 的 Portable Text。主要有三种方式:

  1. markdownToPortableText — 使用 @portabletext/markdown 直接转换 Markdown(推荐用于 Markdown)
  2. htmlToBlocks — 使用 @portabletext/block-tools 将 HTML 解析为 PT 块(用于 HTML 迁移)
  3. 手动构建 — 直接从任意来源(API、数据库等)构建 PT 块

Portable Text 规范

转换前先了解目标格式。PT 是一个由块组成的数组:

[
  {
    "_type": "block",
    "_key": "abc123",
    "style": "normal",
    "children": [
      {"_type": "span", "_key": "def456", "text": "Hello ", "marks": []},
      {"_type": "span", "_key": "ghi789", "text": "world", "marks": ["strong"]}
    ],
    "markDefs": []
  },
  {
    "_type": "block",
    "_key": "jkl012",
    "style": "h2",
    "children": [
      {"_type": "span", "_key": "mno345", "text": "A heading", "marks": []}
    ],
    "markDefs": []
  },
  {
    "_type": "image",
    "_key": "pqr678",
    "asset": {"_type": "reference", "_ref": "image-abc-200x200-png"}
  }
]

主要规则:

  • 每个块和 span 都需要 _key(在数组中唯一)
  • _type: "block" 用于文本块;自定义类型使用各自的 _type
  • markDefs 保存注释数据;span 上的 marks 引用 markDefs[*]._key 或使用装饰器字符串
  • 列表使用常规块上的 listItem("bullet" | "number")和 level(1、2、3……)

转换规则

根据来源格式阅读对应的规则文件:

  • Markdown → Portable Text:rules/markdown-to-pt.md — 使用 @portabletext/markdown 和 markdownToPortableText(推荐)
  • HTML → Portable Text:rules/html-to-pt.md — 使用 @portabletext/block-tools 和 htmlToBlocks
  • 手动构建 PT:rules/manual-construction.md — 以编程方式从任意来源构建块

注意: @sanity/block-tools 是旧版包名。新项目请始终使用 @portabletext/block-tools。API 相同。

评论

支持 Markdown