关于 portable-text-conversion
介绍如何将外部内容转换为 Sanity Portable Text,帮助开发者选择 Markdown 或 HTML 转换方式,也可根据其他来源手动构建 Portable Text 块。
主要功能
- 01使用 markdownToPortableText 转换 Markdown
- 02使用 htmlToBlocks 转换 HTML
- 03手动构建 Portable Text 块
- 04说明块、片段、标记和列表结构
- 05按来源格式提供转换规则
适用场景
- 01将 Markdown 内容迁移到 Sanity
- 02在内容迁移中转换 HTML
- 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.mdmanual-construction.mdmarkdown-to-pt.md详细介绍
便携文本转换
将外部内容(HTML、Markdown)转换为 Sanity 的 Portable Text。主要有三种方式:
markdownToPortableText— 使用@portabletext/markdown直接转换 Markdown(推荐用于 Markdown)htmlToBlocks— 使用@portabletext/block-tools将 HTML 解析为 PT 块(用于 HTML 迁移)- 手动构建 — 直接从任意来源(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"用于文本块;自定义类型使用各自的_typemarkDefs保存注释数据;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