国际站
    控制台
    • 产品简介
    • 快速开始
      • 导入 Git 仓库
      • 从模板开始
      • 直接上传
      • 从 AI 开始
    • 框架指南
      • 前端
        • Vite
        • React
        • Vue
        • 其他框架
      • 后端
      • 全栈
        • Next.js
        • Nuxt
        • Astro
        • React Router
        • SvelteKit
      • 自定义 404 页面
    • 项目指南
      • 项目管理
      • edgeone.json
      • 缓存配置
      • 构建输出配置
      • 错误码
    • 构建指南
    • 部署指南
      • 概览
      • 触发部署
      • 管理部署
      • 部署按钮
      • 使用 Github Action
      • 使用 CNB 插件
      • 使用 IDE 插件
      • 使用 CodeBuddy IDE
    • 域名管理
      • 概览
      • 自定义域名
      • HTTPS 配置
        • 概览
        • 申请免费证书
        • 使用 SSL 托管证书
      • 配置 DNS 的 CNAME 记录
    • 可观测性
      • 概述
      • 指标分析
      • 日志分析
    • Pages Functions
      • 概览
      • Edge Functions
      • Cloud Functions
        • 概览
        • Node Functions
    • KV 存储
    • 边缘 AI
    • API Token
    • EdgeOne CLI
    • Pages MCP
    • 集成指南
      • AI
        • 对话型大模型集成
        • 图片大模型集成
      • 数据库
        • Supabase 集成
        • Pages KV 集成
      • 电商
        • WooCommerce 集成
        • Shopify 集成
      • 支付
        • Stripe 集成
        • Paddle 集成指南
      • CMS
        • Sanity 集成
        • Contentful 集成
        • WordPress 集成
        • Payload集成
      • 身份验证
        • Supabase 集成
        • Clerk 集成
    • 最佳实践
      • EdgeOne Pages 插件上线 Dify Marketplace
      • 使用边缘 AI 模型快速搭建对话型 AI 站点
      • 使用 Shopify 搭建电商平台
      • 使用 Supabase 和 Stripe 搭建 SaaS 站点
      • 如何快速搭建公司品牌站点
      • 如何快速搭建博客站点
      • 使用通用大模型快速搭建AI应用
    • 迁移指南
      • 从 Vercel 迁移至 EdgeOne Pages:优化您在中国区域的网站部署
      • 从 Cloudflare Pages 迁移至 EdgeOne Pages:优化您在中国区域的网站部署
      • 从 Netlify 迁移至 EdgeOne Pages:优化您在中国区域的网站部署
    • 排障指南
    • 常见问题
    • 联系我们
    • 产品动态

    Sanity 集成

    本文介绍如何将 Sanity 作为 Headless CMS,配合 Next.js 框架构建高性能网站。通过 EdgeOne Pages 的一键部署能力,您可以快速完成 Sanity 和 Next.js 的集成,同时获得全球CDN加速,实现网站的最佳性能和用户体验。

    快速入门

    EdgeOne Pages 提供了完整的 Sanity + Nextjs 集成方案 模版。您可以点击模版中的部署按钮进行快速部署。
    本文的集成介绍主要包含以下三个步骤:配置 Sanity 作为数据源、使用 Next.js 生成页面、部署到 EdgeOne Pages。如果您想了解这个方案的具体实现原理,或者需要根据自身需求进行定制化开发,可以继续阅读下面的详细配置步骤。

    Sanity配置

    1. 注册Sanity账号

    使用Sanity首先要做的就是注册一个帐号,访问 Sanity官网,点击“Get Started”开始注册。Sanity只提供30天的免费试用期,之后需要付费使用。

    2. 创建项目

    注册完成后,您需要创建一个新的Sanity项目。首先进入Sanity管理界面,在顶部导航栏找到并点击“Select a project”按钮,在下拉菜单中选择“New project”,然后:
    输入项目名称
    选择是否使用默认数据集配置
    选择项目模板(选择“Next.js”模板)
    点击“Create project”完成创建
    
    这些内容将用于后续测试数据同步和展示功能。

    3. 配置API访问

    创建项目后,我们还需要针对API进行相关配置。在Sanity管理界面中,点击下方选项卡中的“API”选项,您将看到API配置面板,其中包含以下配置选项:
    Tokens:用于创建和管理API访问令牌
    CORS origins:配置允许访问API的域名。当您的Next.js应用部署到云服务后,需要通过AJAX请求访问Sanity API获取数据,此时需要在CORS origins中配置您的应用域名,以确保Sanity服务器返回正确的跨域访问头(CORS headers),允许您的应用正常访问API数据
    
    为了您的数据安全,请妥善保存Project ID和Dataset Name,它们将用于配置Next.js与Sanity的连接。

    4. 配置内容模型

    Sanity的内容管理是通过Sanity Studio来实现的。Sanity Studio是一个可定制的内容管理界面,它提供了直观的界面来管理您的内容。
    Sanity Studio的主要功能包括:
    可视化地创建和编辑内容
    自定义内容编辑界面
    管理媒体文件(图片、视频等)
    实时预览内容效果
    管理用户权限和访问控制
    您可以在本地机器的终端下通过以下命令创建Sanity Studio:
    npm create sanity@latest -- --project {projectId} --dataset production --template clean --typescript --output-path studio-{your-project-name}
    cd studio-{your-project-name}
    请将 {projectId} 替换为您的Sanity项目ID,{your-project-name} 替换为您想要的项目名称。
    
    Sanity Studio的内容模型定义在 schemaTypes 目录下,您可以在这里定义多个模型文件,然后在 schemaTypes/index.ts 中统一引入。例如,我们可以创建一个 postType.ts 文件来定义博客文章的内容模型:
    import {defineField, defineType} from 'sanity'
    
    export const postType = defineType({
    name: 'post',
    title: 'Post',
    type: 'document',
    fields: [
    defineField({
    name: 'title',
    type: 'string',
    validation: (rule) => rule.required(),
    }),
    defineField({
    name: 'slug',
    type: 'slug',
    options: {source: 'title'},
    validation: (rule) => rule.required(),
    }),
    defineField({
    name: 'category',
    type: 'string',
    validation: (rule) => rule.required(),
    })
    ],
    })
    然后在 schemaTypes/index.ts 中引入这个模型:
    import {postType} from './postType'
    
    export const schemaTypes = [postType]
    这个内容模型定义了以下字段:
    title:文章标题(必填)
    slug:文章URL别名(必填,基于标题自动生成)
    category:文章分类(必填)
    您可以根据需要修改这些字段定义,添加或删除字段。

    5. 启动Sanity Studio

    在项目根目录下运行以下命令启动Sanity Studio:
    npm run dev
    启动后,访问 http://localhost:3333 即可进入Sanity Studio的内容管理界面。
    

    6. 部署Sanity Studio

    完成内容配置后,您需要将Studio部署到Sanity平台。在项目根目录下运行 npm run deploy。
    在部署过程中,系统会提示您输入一个项目名称(例如:my-blog),部署完成后,您可以通过 https://my-blog.sanity.studio 访问您的Sanity Studio。现在,您之前通过 http://localhost:3333 访问的本地Studio界面,已经可以通过这个在线地址访问了。
    接下来,您可以在线Studio中添加内容:
    
    至此,我们已经完成了Sanity内容管理系统的配置。现在您可以通过在线Studio轻松管理网站内容。接下来,我们将开始配置前端应用,通过Sanity API获取这些内容并展示在网站上。

    部署到 EdgeOne Pages

    完成 Sanity 配置后,您需要设置必要的开发环境变量,以便您的应用能够正确连接到这些服务。可以将对应参数填入到本地 .env 进行本地开发,需要部署到 EdgeOne Pages 中还需要填入环境变量。

    1. 使用模版创建应用

    EdgeOne Pages 已经为您准备了一个基于 Next.js 的完整模板,支持增量静态再生 (ISR) 功能,在模版页面找到 Portfolio with Sanity,点击 Deploy 进入到部署页面。
    

    2. 填写环境变量

    在 EdgeOne Pages 配置面板中,您需要填写两项 Sanity 相关的环境变量信息:
    NEXT_PUBLIC_SANITY_PROJECT_ID:填入您的Sanity Project ID
    NEXT_PUBLIC_SANITY_DATASET:填入您的Sanity Dataset Name
    
    注意:
    若未配置上述 Sanity 环境变量,ISR 功能将自动关闭,默认读取保存在仓库代码中src/content/projects 的 markdown 内容,如果不需要 CMS 进行内容管理您可以直接修改 markdown 内容以维护内容。
    完成上述环境变量配置后,点击 “立即创建” 开始部署,等待部署完成后将显示部署成功界面。
    

    3. 使用和验证

    portfolio-with-sanity 模版提供了默认的内容模型文件:postType.ts,您可以根据需要参考使用,将其拷贝到 Sanity Studio 项目中。
    配置好上述数据模版之后 ,启动 Sanity Studio,在对应的 project 和 dataset 中配置或者增加数据,无需重新部署项目将会看到作 portfolio 数据增加或者改变。
    
    
    注意:
    默认的定时增量更新的时间间隔为 60s 根据实际情况可修改 src/conf/index.ts 下的 NEXT_REVALIDATE 值.
    至此,我们已经完成了 Sanity 方案的完整部署流程。通过这个方案,你可以:
    使用 Sanity 管理内容,享受其强大的 Headless CMS 功能
    集成 Next.js 的 ISR(增量静态再生)技术,自动实现定时内容更新,同时保持静态页面的极致性能
    通过 EdgeOne Pages 实现自动化部署,简化运维工作
    获得全球 CDN 加速,提升用户体验

    更多相关内容

    查看更多Sanity集成方案:EdgeOne Pages提供的Sanity模板
    了解Next.js更多功能:Next.js官方文档
    探索Sanity更多功能:Sanity官方文档