发现于 #3787 的实现与实测(PR:claude/issue-3786-3787-pageheader-docs-demo),不在该 PR 处理 —— 那一单的验收面是 catalog 示例的三个渲染宿主,这一条是剩下的第四个宿主 + 一处配置漂移。
现象一:Playground 少一个注册宿主
文档站有 4 个 SchemaRenderer 宿主:
apps/site/app/components/InteractiveDemo.tsx
apps/site/app/components/LiveSplitDemo.tsx
apps/site/app/components/SchemaThumbnail.tsx
apps/site/app/playground/page.tsx
#3787 的 PR 给前三个(渲染 catalog 示例的那三个)加了 registerLayoutBlocks,因为 @object-ui/layout 此前根本不是 apps/site 的依赖,page-header 会渲染成红色 Unknown component type(OBJUI-001)。第四个 —— Playground —— 渲染的是用户手输的 schema,不在那次验收面内,所以没动:今天在 Playground 里敲一个 page-header(或 app-shell / sidebar-nav)仍然得到同一块红面板,尽管文档站现在已经依赖并能渲染它们了。
page-header 的占位符也接不住:packages/components/src/renderers/placeholders.tsx:82 里 'page:header', 'page-header' 属于 opt-in 的 PROTOCOL_COMPONENTS,不在 eager 注册的 PALETTE_PLACEHOLDER_BLOCKS 里,而 registerPlaceholders() 只有 apps/console 调。
建议:Playground 也 import ./components/registerLayoutBlocks(一行),或把注册提到一个所有宿主共用的更高位置。顺带值得一起想清楚的是,Playground 该覆盖的组件面到哪为止 —— 它现在也没有 plugin-detail(所以 record:* 全渲染不出),而 PluginLoader 那套按需加载只服务 MDX 页面。
现象二:transpilePackages 列着非依赖包
apps/site/next.config.mjs 的 transpilePackages 里有两个不是 apps/site 依赖、也没有任何代码 import 的包:
@object-ui/i18n
@object-ui/plugin-aggrid
apps/site/node_modules/@object-ui/ 下没有它们的 symlink(pnpm 严格 linker),所以这两项不做任何事。@object-ui/layout 在 #3787 之前也是这个状态 —— 列在 transpilePackages 里、但既非依赖也无 import,看着像已经支持、实际渲染是红面板;那次是靠浏览器实测才发现的。这类「配置声明了、依赖图里没有」的条目正好是让人误判能力已就位的东西。
建议:删掉这两项,或补齐依赖(取决于是否真想在站内渲染它们)。
参考位置
关联:#3787(发现于此)
发现于 #3787 的实现与实测(PR:
claude/issue-3786-3787-pageheader-docs-demo),不在该 PR 处理 —— 那一单的验收面是 catalog 示例的三个渲染宿主,这一条是剩下的第四个宿主 + 一处配置漂移。现象一:Playground 少一个注册宿主
文档站有 4 个
SchemaRenderer宿主:#3787 的 PR 给前三个(渲染 catalog 示例的那三个)加了
registerLayoutBlocks,因为@object-ui/layout此前根本不是apps/site的依赖,page-header会渲染成红色Unknown component type(OBJUI-001)。第四个 —— Playground —— 渲染的是用户手输的 schema,不在那次验收面内,所以没动:今天在 Playground 里敲一个page-header(或app-shell/sidebar-nav)仍然得到同一块红面板,尽管文档站现在已经依赖并能渲染它们了。page-header的占位符也接不住:packages/components/src/renderers/placeholders.tsx:82里'page:header', 'page-header'属于 opt-in 的PROTOCOL_COMPONENTS,不在 eager 注册的PALETTE_PLACEHOLDER_BLOCKS里,而registerPlaceholders()只有apps/console调。建议:Playground 也 import
./components/registerLayoutBlocks(一行),或把注册提到一个所有宿主共用的更高位置。顺带值得一起想清楚的是,Playground 该覆盖的组件面到哪为止 —— 它现在也没有plugin-detail(所以record:*全渲染不出),而PluginLoader那套按需加载只服务 MDX 页面。现象二:
transpilePackages列着非依赖包apps/site/next.config.mjs的transpilePackages里有两个不是apps/site依赖、也没有任何代码 import 的包:@object-ui/i18n@object-ui/plugin-aggridapps/site/node_modules/@object-ui/下没有它们的 symlink(pnpm 严格 linker),所以这两项不做任何事。@object-ui/layout在 #3787 之前也是这个状态 —— 列在transpilePackages里、但既非依赖也无 import,看着像已经支持、实际渲染是红面板;那次是靠浏览器实测才发现的。这类「配置声明了、依赖图里没有」的条目正好是让人误判能力已就位的东西。建议:删掉这两项,或补齐依赖(取决于是否真想在站内渲染它们)。
参考位置
apps/site/app/playground/page.tsx(第四个渲染宿主)apps/site/app/components/registerLayoutBlocks.ts(docs/examples: PageHeader 文档页的唯一 live demo(layout-page-header/pageheader-with-actions)手搓 div,完全不用page-header#3787 新增,含理由)apps/site/next.config.mjs(transpilePackages)packages/components/src/renderers/placeholders.tsx:82、:118-121关联:#3787(发现于此)