用途
nebula-node-page-scaffold 用于为 Drupal 单个节点页面(单实体详情视图)搭建 Canvas UI 脚手架。它面向的是“一次渲染一个节点”的详情体验:每个内容类型(或每个路由模式)对应一个页面模板,例如文章、活动、产品等。
该技能不适用于列表、索引或集合视图,例如博客首页、分类归档、“最新 10 条”、搜索结果,或任何由多个节点组成的网格或信息流。这些流程使用不同的组件(如列表 + 分页)、不同的数据形态和其他技能;不要用本技能去限制或重新定义列表类工作。如果用户只是在构建列表,应使用 canvas-data-fetching、nebula-workbench-pages 以及常规组件工作,而不套用本脚手架规则。
适用时机
当任务是为单个节点/详情页设计或实现 UI,且该页面将映射到 Drupal 节点(或等价物),并且用户希望——或安全默认是——交付仓库产物(组件 + 一个示例 pages/ 组合),而不是为每个节点实例做自动化远程发布时,使用本技能。
当用户明确要求不要在同一任务中连接 API、Source MCP 或 JSON:API 来创建或填充每个单独节点的页面时,本技能尤其相关。
主要能力与交付内容
- 在 src/components/<name>/ 下生成 Canvas 组件,包含 index.jsx 和 component.yml,遵循 canvas-component-definition 与 canvas-component-metadata。
- 在规范 pages/ 目录中提供一个示例 Workbench 页面(参见 nebula-workbench-pages),演示如何组装这些组件:插槽顺序、典型 props 以及任何 js.* 类型。该页面是蓝图,并不表示每个节点实例都已在 Drupal 中存在。
- 变更后做静态校验:nebula-component-validation(npm run code:fix)。
使用方式与边界
除非用户在同一请求中明确要求远程集成,否则:
- 不要使用 Source MCP(或类似工具)执行 create_node、上传媒体,或为每个单独详情节点创建/发布 Canvas 页面作为主要交付物。
- 当需求是脚手架时,不要把“节点页面”工作当作“连接 JSON:API 并为每个实体的每个字段填充数据”;实时数据集成应留作后续或单独任务。
- 不要因 OAuth、VITE_CANVAS_SITE_URL 或推送/发布流水线而阻塞,以判定脚手架已完成。
Workbench 可以使用 props 示例、组件内部的可选预览数据或示例页面 props——这是可以的。本技能划定的界线是:在“创建节点页面 UI”的过程中,不尝试通过 API 构建或同步一批真实节点页面。
与其他技能的关系
- canvas-data-fetching:当组件需要在生产环境加载真实数据时,仍可用于组件级模式(SWR、JsonApiClient、过滤器)。本技能不禁止组件中的数据;它禁止的是以 API 驱动的方式组装大量单独页面作为脚手架交付物。
- acquia-source-canvas-pages / acquia-source-site-build:仅在用户想要远程 Source 发布或端到端迁移时运行——除非用户明确说明,否则不应作为“添加节点详情屏”的默认做法。
完成标准
满足以下条件时,任务视为适当完成:
- 组件是有效的 Canvas 目标,并能通过示例 pages/*.json 在 Workbench 中渲染。
- 示例页面记录了组合方式(树中包含什么、典型 props)。
- 没有为“每个”节点尝试多余的远程页面/节点创建。
如果用户之后想要生产环境接线,应将其视为单独任务,届时再加载相关的 Acquia Source 或部署技能。
限制
本技能仅覆盖单节点/详情页脚手架,不覆盖列表、索引或集合视图;不负责远程发布、节点创建、媒体上传或端到端迁移;不要求也不阻塞于 OAuth、VITE_CANVAS_SITE_URL 或推送发布流水线。关于具体收费、价格、平台支持范围等信息,资料中暂未提供。