关于 enonic-nextxp-integration
enonic-nextxp-integration 指导通过 @enonic/nextjs-adapter 集成 Next.js 前端与 Enonic XP,涵盖内容渲染、Guillotine 数据获取、Content Studio 预览、部署和验证。
主要功能
- 01识别 Next.js 与 Enonic XP 集成点
- 02配置适配器和环境变量
- 03将内容类型映射到 React 组件
- 04配置 Guillotine GraphQL 查询
- 05启用 Content Studio 预览与部署
- 06验证集成并排查问题
适用场景
- 01将现有 Next.js 前端连接到 Enonic XP
- 02使用自定义 React 视图渲染 Enonic 内容
- 03在 Content Studio 预览草稿内容
- 04部署前检查映射和构建
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ webmaxru/ enonic-agent-skills --skill enonic-nextxp-integration安装后在 Claude Code 中输入/enonic-nextxp-integration确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/nextxp-page.template.tsxreferences/compatibility.mdexamples.mdnextxp-reference.mdtroubleshooting.mdscripts/find-nextxp-targets.mjs详细介绍
Next.js + Enonic XP 无头集成(Next.XP)
操作步骤
步骤 1:识别工作区集成范围
- 检查工作区中的 Next.js 入口点(
next.config.*、包含next依赖的package.json)、Enonic XP 应用标记(包含com.enonic.xp的build.gradle)或现有的 Next.XP 适配器引用(@enonic/nextjs-adapter)。 - 在 Node 运行时可用时,执行
node scripts/find-nextxp-targets.mjs .,盘点 Next.js 项目、包含ENONIC_*变量的.env文件、组件映射文件(_mappings.ts)和 Guillotine 查询文件。 - 如果 Node 运行时不可用,请手动检查
package.json、.env和src/components/_mappings.ts,以识别集成范围。 - 如果工作区同时包含 Enonic XP 应用和 Next.js 前端,请在继续之前确认任务针对哪一方。
- 如果工作区不是 Next.js + Enonic XP 项目,请停止并说明此技能不适用。
步骤 2:配置 Enonic 适配器
- 在编写或修改配置之前,阅读
references/nextxp-reference.md。 - 在 Next.js 项目根目录中验证或创建
.env文件(本地开发时使用.env.local),并设置所需变量:ENONIC_API_TOKEN— 用于预览模式身份验证的共享密钥。ENONIC_APP_NAME— 完整限定的 Enonic 应用名称(例如,com.example.myproject)。ENONIC_MAPPINGS— 区域设置到项目/站点的映射(例如,en:intro/hmdb)。ENONIC_API— Guillotine API 端点的基础 URL(例如,http://127.0.0.1:8080/site/)。
- 如果尚未安装,请安装
@enonic/nextjs-adapter包:npm install @enonic/nextjs-adapter。 - 在
src/components/_mappings.ts顶部导入@enonic/nextjs-adapter/baseMappings,以注册内置组件渲染器。 - 验证 Next.js 项目是否由
nextxp-template脚手架创建,或是否包含预期的文件结构:src/components/_mappings.ts、src/app/[locale]/[[...contentPath]]/page.tsx,以及src/app/api/下的 API 路由。 - 阅读
references/compatibility.md,确认@enonic/nextjs-adapter(v4.x)、Next.js(16+)、React(19)和 Enonic XP 之间的版本要求。 步骤 3:将内容类型映射到 React 组件 - 阅读
references/nextxp-reference.md,了解组件注册表 API 和映射模式。 - 阅读
references/examples.md,查看完整的内容类型映射示例,包括查询、视图和处理器。 - 对于需要自定义渲染的每种 Enonic 内容类型:
a. 在
src/components/queries/中创建 Guillotine GraphQL 查询函数,使用类型内省(... on AppName_ContentTypeName)获取该内容类型的特定字段。 b. 对于含有 HTML 区域(富文本)字段的内容类型,使用@enonic/nextjs-adapter中的richTextQuery(fieldName)生成查询片段。富文本渲染部分请参阅references/nextxp-reference.md。 c. 在src/components/views/中创建 React 视图组件,接收FetchContentResult属性并渲染获取的数据。对于 HTML 区域字段,使用@enonic/nextjs-adapter/views/RichTextView中的RichTextView。 d. 在src/components/_mappings.ts中使用ComponentRegistry.addContentType()注册两者。 - 对于页面组件(页面、部件、布局):
a. 在 Enonic 应用的
src/main/resources/site/pages/、parts/或layouts/下定义组件 XML。 b. 在src/components/pages/、parts/或layouts/中创建对应的 React 组件。布局使用LayoutProps,单独渲染区域时使用具名导出RegionView。 c. 使用ComponentRegistry.addPage()、ComponentRegistry.addPart()或ComponentRegistry.addLayout()注册。 - 对于布局,使用
LayoutProps类型,并使用RegionView(单数形式,具名导出)单独渲染区域,而不是使用RegionsView。 - 从
@enonic/nextjs-adapter导入APP_NAME和APP_NAME_UNDERSCORED,以便动态引用内容类型。
步骤 4:配置 Guillotine 数据获取
- 阅读
references/nextxp-reference.md,了解 Guillotine 查询结构和变量传递方式。 - 编写 GraphQL 查询,通过
guillotine { get(key:$path) { ... } }使用$path:ID!作为获取内容的主变量。 - 使用类型内省访问特定内容类型的字段:
... on AppName_ContentTypeName { data { ... } }。 - 对于富文本字段(HtmlArea),使用适配器中的
richTextQuery(fieldName),而不是直接查询该字段。使用@enonic/nextjs-adapter/views/RichTextView中的RichTextView进行渲染。 - 对于部件和可配置组件,导出一个查询对象,其中包含
query(path, context, config)和variables(path, context, config)函数。 - 使用处理器(可选的异步函数)对查询结果进行后处理,然后再传递给视图。
- 使用
ComponentRegistry.setCommonQuery()设置所有页面组件共享的数据。如果不需要通用查询,请将其移除以优化性能。 - 使用适配器中的
getUrl()和getAsset()辅助函数处理 URL,确保它们在独立模式和 Content Studio 预览模式下均可正常工作。 - 对于富文本中的宏,在使用
RichTextView的其他组件之前,先使用ComponentRegistry.addMacro()注册这些宏。宏注册 API 请参阅references/nextxp-reference.md。 步骤 5:启用 Content Studio 预览模式 - 阅读
references/nextxp-reference.md,了解完整的预览架构详情。 - 在 Enonic XP 中安装
Next.XP应用:XP Menu → Applications → Install → search "Next.XP"。 - 在 Content Studio 的站点编辑视图中,通过 “Applications” 下拉框将 Next.XP 应用添加到目标站点。
- 验证默认预览配置:URL 为
http://127.0.0.1:3000,密钥与ENONIC_API_TOKEN匹配。 - 对于生产环境,通过应用配置将 Next.XP 应用配置为使用已部署的 Next.js URL 和共享密钥:
nextjs.default.url = <Next.js app URL> nextjs.default.secret = <shared secret> - 预览模式会自动将 Guillotine API 切换到
draft分支,而公开的 Next.js 前端使用master(已发布)分支。 - 在所有组件链接中使用
getUrl(),确保 URL 在 Content Studio 的预览、内联和编辑模式下都能正确解析。 - 如果预览显示空白页面,请阅读
references/troubleshooting.md了解诊断步骤。
步骤 6:部署到生产环境
- 阅读
references/nextxp-reference.md,查看部署检查清单。 - 使用
enonic cloud app install将 Enonic 应用部署到 Enonic Cloud。 - 在 Enonic Cloud 中创建 ingress,以公开 Guillotine API(目标路径
/site,公开路径/api)。 - 将 Next.js 应用部署到 Vercel 或其他托管平台。
- 设置生产环境变量:
ENONIC_API、ENONIC_APP_NAME、ENONIC_API_TOKEN、ENONIC_MAPPINGS。 - 在 Enonic Cloud 中配置 Next.XP 应用,使其指向生产环境的 Next.js URL。
- 在 Content Studio 中发布内容,使其显示在实时前端上。
步骤 7:验证集成
- 执行
node scripts/find-nextxp-targets.mjs .,确认适配器、映射和环境配置仍能正确解析。 - 验证独立 Next.js 渲染是否正常:在
http://localhost:3000访问已发布的内容。 - 验证 Content Studio 预览能否正确渲染草稿和已发布的内容。
- 访问内容 URL,测试内容类型映射并确认自定义视图能够渲染。
- 在页面处理程序中使用
@enonic/nextjs-adapter的validateData(),捕获无效的内容响应。页面静态生成(SSG)处理程序模式请参阅references/nextxp-reference.md。 - 运行工作区构建(
npm run build),检查 TypeScript 或构建错误。
错误处理
- 如果 Content Studio 预览显示空白页面,请阅读
references/troubleshooting.md,了解预览代理诊断、令牌不匹配检测和 CORS 问题。 - 如果 Guillotine 查询返回空数据或意外数据,请确认内容类型名称与 introspection 模式匹配,并在 GraphQL Playground 中测试查询:
http://localhost:8080/site/<project>。 - 如果导入
@enonic/nextjs-adapter失败,请查看references/compatibility.md了解版本要求,并确认已安装该软件包。 - 如果内容在预览中能够渲染,但未显示在公开站点上,请确认内容已发布(已从
draft分支移至master分支)。 - 如果组件映射未生效,请确认
_mappings.ts中的注册使用了正确的、带APP_NAME的完全限定内容类型或组件名称。
评论
支持 Markdown