关于 puck
Puck 是用于将 React 可视化编辑器 Puck 集成到应用中的技能,指导开发者依据文档配置组件、持久化内容并在浏览器中验证。内容数据由应用自行保存和管理。
主要功能
- 01配置应用组件供编辑
- 02设置编辑器和渲染路由
- 03指导应用自行持久化内容
- 04依据文档提供集成指导
- 05排查浏览器渲染问题
适用场景
- 01将 Puck 集成到现有 React 应用
- 02选择组件及可编辑字段
- 03诊断样式或 hydration 问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ puckeditor/ skills --skill puck安装后在 Claude Code 中输入/puck确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/ai.mdconfig-authoring.mdframeworks.mdintegration.mdskill-feedback.mdtroubleshooting.md详细介绍
Puck
Puck 是一个 React 可视化编辑器。config 声明应用中的哪些组件可编辑;编辑器会生成 JSON Data 负载;应用存储该负载,并通过 <Render> 将其渲染出来。数据归应用所有——没有托管内容存储。
核心原则
- 先看文档。 切勿凭记忆编写 Puck 代码——获取相关页面(见下文的文档)。API 一直在变化,字段或属性名称写错造成的代价远高于获取文档。包的作用域在 0.21 中发生了变化(
@measured/puck→@puckeditor/core);在提供任何与版本相关的建议前,先运行npm ls @puckeditor/core。 - 公开应用的真实组件。 集成的价值在于配置。应用已有组件时,不要另造通用的 Hero/Text/Button 区块。
- 不要为了适配 Puck 而改造应用。 在组件的
render中进行适配,而不是编辑应用的组件。 - 编辑前确认范围。 哪些组件可编辑、要添加哪些路由,以及
Data存储在哪里,都由用户决定;做错这些决定的代价也最高。 - 在浏览器中验证,而不是只做类型检查。 集成可以通过编译,却把所有组件都渲染成无样式的状态;这通常是首次运行的结果,并不代表成功。
文档
每个文档页面都可以通过在 URL 末尾添加 .md 获取 Markdown 版本——请获取这些版本,而不是 HTML:
https://puckeditor.com/docs/getting-started.md
https://puckeditor.com/docs/api-reference/fields/slot.md
https://puckeditor.com/llms.txt 是完整的页面索引——不确定哪个页面涵盖相关内容时,先获取它,再获取对应页面的 .md。
注意:当前 .md 转换会从代码块中移除 import 行,因此获取的示例展示了用法,却不包含所需的导入语句。除非页面另有说明,所有内容都从 @puckeditor/core 导入。
最简集成
整个 API 表面只需三个文件。类型、字段和属性见组件配置和 <Puck> 参考。
// puck.config.tsx — maps the app's components to editable Puck components
import type { Config } from "@puckeditor/core";
import { Hero } from "@/components/Hero";
type Props = { Hero: { title: string } };
export const config: Config<Props> = {
components: {
Hero: {
fields: { title: { type: "text" } },
defaultProps: { title: "Hello, world" },
render: ({ title }) => <Hero title={title} />,
},
},
};
// The editor — client-only. Import "@puckeditor/core/puck.css" from the server parent.
"use client";
import { Puck } from "@puckeditor/core";
import { config } from "@/puck.config";
export function Editor({ data }: { data: any }) {
// onPublish receives the Data payload — persist it wherever the app stores content
return <Puck config={config} data={data} onPublish={save} />;
}
// The page — server-safe
import { Render } from "@puckeditor/core";
import { config } from "@/puck.config";
export default function Page({ data }: { data: any }) {
return <Render config={config} data={data} />;
}
启动新应用
npx create-puck-app my-app 会根据配方搭建应用:next、next-ai、react-router 或 react-router-ai。根据用户使用的框架进行选择;只有用户想要使用 Puck AI 时才选择 -ai 变体(references/ai.md)。
进行任何更改前,先阅读生成的 README——这些配方有意采用了一些简化方案,真实应用必须替换:未经身份验证的 /edit 路由,以及写入本地文件系统而非数据库的持久化方案。两者都必须在部署前修复。此后,references/integration.md 中的配置、持久化和身份验证指南均可照常使用。
特定用例参考
- 将 Puck 端到端集成到现有应用:references/integration.md
- 选择要公开的现有组件并设计其字段:references/config-authoring.md
- 为特定框架或路由器接入编辑器和渲染路由:references/frameworks.md
- 诊断损坏的集成——无样式预览、FOUC、RSC 错误、水合、拖放:references/troubleshooting.md
- 添加 Puck AI(由聊天驱动的页面生成插件):references/ai.md
- 提交有关此技能的反馈:references/skill-feedback.md
阅读前值得了解的事实
<Puck>仅限客户端使用。<Render>和resolveAllData是仅有的兼容 RSC 的 API。<Puck>挂载后,data便无法更改。请在渲染前加载它。- Puck 会在 iframe 中渲染画布,并将宿主样式表同步到其中。大多数“Puck 出故障”的报告,实际原因都是应用的样式未能应用到该 iframe 中 — references/troubleshooting.md。
- 嵌套拖放区域请使用
slot字段。旧版DropZone组件存在 RSC 问题。 - 编辑器路由和保存端点都可以写入内容。正式发布前,必须为它们接入应用的身份验证。