Sanity 是一个现代化的内容管理系统(CMS),它以其灵活性、可扩展性和开发者友好性而闻名。作为一个”内容操作系统”,Sanity 不仅仅是一个简单的 CMS,而是一个全面的内容管理平台,可以满足各种规模和复杂度的数字项目需求。

同类型的还有基于 JavaScript 开源的 [[Strapi]],[[Contentful]],[[NocoDB]] 等等。

Sanity 的本质

Sanity 本质上是一个 headless CMS,这意味着它将内容管理与前端展示完全分离。它由三个核心组件构成:

  1. Sanity Studio: 一个可自定义的内容编辑界面,用于创建和管理内容。
  2. Content Lake: 一个实时的云托管数据库,用于存储和分发内容。
  3. Sanity APIs: 一套强大的 API,用于查询和操作内容。

这种架构使 Sanity 成为一个极其灵活和可扩展的系统,能够适应各种内容管理需求。

Sanity 的功能

Sanity 提供了一系列强大的功能,使其成为内容管理领域的佼佼者:

  1. 高度可定制的内容模型: Sanity 允许开发者使用 JavaScript 定义自己的内容模型,这意味着你可以创建任何类型的内容结构,从简单的博客文章到复杂的产品目录。
  2. 实时协作: Sanity Studio 支持多用户实时协作,团队成员可以同时编辑内容而不会互相干扰。
  3. 版本控制和历史记录: 每次内容更改都会被记录,你可以轻松查看和恢复之前的版本。
  4. 强大的查询语言: Sanity 使用 GROQ(Graph-Relational Object Queries)作为其查询语言,这是一种强大而灵活的方式来检索和操作内容。
  5. 图像处理: Sanity 提供内置的图像处理功能,可以在 URL 中指定裁剪、调整大小等操作。
  6. 多语言支持: Sanity 原生支持多语言内容管理,使国际化项目变得简单。
  7. 可扩展性: Sanity 提供了丰富的插件生态系统,你也可以开发自己的插件来扩展功能。

Sanity 的价格

Sanity 提供了一个慷慨的免费计划,适合个人开发者和小型项目:

  • 20 个用户席位
  • 2 个权限角色,只能使用管理员(Administrator)和查看者(Viewer)两种权限角色
  • 2 个公共数据集,不支持私有数据集
  • API CDN 请求:每月 100,000 次
  • API 请求:每月 500,000 次
  • 存储空间:10GB 资产存储
  • 带宽:10GB
  • 不包含评论和任务功能
  • 不支持定时发布
  • 可定制的内容工作区
  • 托管的实时内容数据库
  • 实时预览和可视化编辑工具

Sanity 的计费基于日历月,并在每月初预先收取费用。所有计划都包含一定的资源配额,包括 API 请求、CDN 请求、带宽和存储等。超出配额的使用将按超额费率收费,除非是没有注册信用卡的免费项目。

Sanity 允许按需付费,这意味着即使在免费计划中,也可以为超出配额的使用付费,而不必强制升级到更高的计划。这为用户提供了很大的灵活性,特别是对于流量可能突然增加的项目。

对于计划变更和取消,Sanity 采用按比例计费的方式。例如,如果在月中升级计划,只会收取剩余天数的费用,并减去已支付的旧计划费用。

Sanity 的使用方法

使用 Sanity 通常涉及以下几个步骤:

  1. 安装和初始化: 使用 npm 创建一个新的 Sanity 项目:

    npm create sanity@latest
    

这个命令会引导你完成项目设置,包括选择模板、配置项目等。

  1. 定义内容模型: 在schemas文件夹中定义你的内容模型。例如,一个简单的博客文章模型可能如下:

    export default {
      name: 'post'
      title: 'Blog Post'
      type: 'document'
      fields: [
        {
          name: 'title'
          title: 'Title'
          type: 'string'
        }
        {
          name: 'content'
          title: 'Content'
          type: 'array'
          of:
        }
      ]
    }
    
  2. 自定义 Sanity Studio: 你可以通过修改sanity.config.js文件来自定义 Studio 的外观和行为。

  3. 创建和管理内容: 运行sanity start命令启动 Sanity Studio,然后你就可以通过浏览器访问 Studio 来创建和管理内容了。

  4. 查询内容: 使用 GROQ 语言通过 Sanity 的 API 查询内容。例如:

    const query = '*{title, content}'
    const result = await client.fetch(query)
    
  5. 部署: 使用sanity deploy命令可以轻松部署你的 Sanity Studio。

优势

  1. 灵活性: Sanity 的内容模型可以适应几乎任何类型的内容结构,这使得它非常适合复杂的内容管理需求。
  2. 开发者友好: Sanity 使用 JavaScript/TypeScript 作为配置语言,这对于大多数 Web 开发者来说非常熟悉。
  3. 实时协作: Sanity 的实时协作功能使团队协作变得简单高效。
  4. 性能: Sanity 的 Content Lake 提供了出色的性能和可扩展性,能够处理大量的内容和高流量。
  5. API 优先: Sanity 的 API 优先 approach 使得它非常适合 headless 架构和多渠道内容分发。
  6. 强大的查询能力: GROQ 查询语言提供了强大而灵活的内容检索能力。

缺点

尽管 Sanity 有许多优点,但也存在一些潜在的缺点:

  1. 学习曲线: 对于习惯传统 CMS 的用户来说,Sanity 的 headless approach 和自定义内容模型可能需要一些时间来适应。
  2. 成本: 虽然 Sanity 提供免费计划,但对于需要高级功能或大量内容的项目,成本可能会相对较高。
  3. 复杂性: Sanity 的灵活性意味着它可能比某些简单的 CMS 更复杂,特别是对于小型项目。
  4. 依赖性: 作为一个云服务,你的内容和工作流程在某种程度上依赖于 Sanity 的服务。
  5. 前端集成: 虽然 Sanity 提供了丰富的 API,但将内容集成到前端可能需要额外的工作,特别是对于不熟悉 headless CMS 的开发者。

应用场景

Sanity 适用于各种类型的数字项目,包括但不限于:

  1. 作为企业网站内容管理后台。
  2. 与电子商务平台集成,Sanity 可以与 Shopify 等平台集成,提供强大的产品内容管理能力
  3. 多渠道内容分发: Sanity 的 API 优先 approach 使其成为多渠道内容策略的理想选择。
  4. 移动应用: Sanity 可以作为移动应用的后端内容管理系统。
  5. 大规模内容操作: Sanity 的 Content Lake 能够处理大量内容,适合需要管理大量数据的项目。