721 字
4 分钟
快速上手 Sanity CMS:构建高效、可扩展的解耦式内容管理系统

为什么选择 Sanity CMS?#

在传统的 CMS(如 WordPress)中,内容管理与前端显示是高度耦合的。而 Sanity CMS 作为一个无头(Headless)CMS,将内容存储与展示层彻底分离。

Sanity 的核心优势:

  • 结构化内容(Content as Data): 内容不再是死板的 HTML,而是可查询的 JSON 数据。
  • 实时协作: Sanity Studio 支持多用户实时编辑,体验类似于 Google Docs。
  • GROQ 查询语言: 相比 GraphQL,Sanity 原生的 GROQ 语言在处理复杂关联时更加简洁。
  • 高度定制: 基于 React 的 Studio 界面,开发者可以编写自定义组件来增强编辑体验。

核心架构一览#

Sanity 主要由三个部分组成:

  1. Sanity Content Lake: 云端完全托管的数据库,存储所有的内容和资源。
  2. Sanity Studio: 本地运行、部署在云端的开源 React 仪表盘,用于内容输入。
  3. API / Client: 通过 GROQ 或 GraphQL 获取数据并渲染到任何设备上。

快速上手指南#

1. 环境准备与 CLI 安装#

确保你的 Node.js 版本在 14.x 以上。首先全局安装 Sanity CLI:

Terminal window
npm install -g @sanity/cli

2. 初始化项目#

在文件夹中运行初始化命令,它会引导你完成登录和项目创建:

Terminal window
sanity init

提示:建议选择 Clean project with no predefined schemas,这有助于你从零理解数据结构。

3. 定义内容模型 (Schema)#

在 Sanity 中,“一切皆 Schema”。假设我们要创建一个“作者”模型,在 schemas/author.js 中编写:

export default {
name: 'author',
title: '作者',
type: 'document',
fields: [
{
name: 'name',
title: '姓名',
type: 'string',
description: '请输入作者的真实姓名'
},
{
name: 'slug',
title: '唯一标识 (Slug)',
type: 'slug',
options: { source: 'name', maxLength: 96 }
},
{
name: 'image',
title: '头像',
type: 'image',
options: { hotspot: true } // 允许在后台裁剪图片
},
{
name: 'bio',
title: '简介',
type: 'text'
}
]
}

4. 运行与本地预览#

启动 Sanity Studio:

Terminal window
sanity start

访问 http://localhost:3333。你会发现,刚才定义的 Schema 已经自动生成了美观的 UI 表单。

5. 获取数据 (GROQ 示例)#

一旦你在后台输入了数据,就可以通过 API 获取。GROQ 是 Sanity 的杀手锏,语法非常直观:

// 获取所有类型为 author 的文档,且只要姓名和图片
*[_type == "author"] {
name,
"imageUrl": image.asset->url
}

进阶:如何部署?#

Sanity 提供了极简的部署流程,将你的管理后台(Studio)托管到 web 上:

Terminal window
sanity deploy

执行后,你会得到一个类似 https://your-project.sanity.studio 的链接,你的团队成员可以直接登录并发布内容。


总结#

Sanity 不仅仅是一个内容存储库,它更是一个内容操作系统。它将开发者从繁琐的数据库建模中解放出来,同时给予前端无限的自由度。无论你使用的是 Next.js、Vue 还是 Flutter,Sanity 都能通过其强大的 API 支撑起你的内容需求。

快速上手 Sanity CMS:构建高效、可扩展的解耦式内容管理系统
https://sw.rscclub.website/posts/sanitycms/
作者
杨月昌
发布于
2022-04-28
许可协议
CC BY-NC-SA 4.0