无头 CMS 编辑器

无头 CMS 可视化编辑器,基于 GrapesJS

为你的无头 CMS 添加可视化拖放编辑器,同时保留现有的内容 API、前端和基础设施。

可视化拖拽自定义组件可重复使用的块REST 与 GraphQL你的CMS你的前端你的数据
在现有内容API上进行可视化编辑层:左侧是组件库,画布上的页面,右侧是所选组件的属性。
看它跑起来

这就是你添加的编辑表面

上面的屏幕是排列的模型,用 CSS 绘制,因此页面成本不高。背后的编辑器引擎是真实且公开的:打开官方 GrapesJS 演示,拖动一个部分到画布上,你看到的内容团队在你自己的 CMS 上会拥有的画布、组件树和样式控制。

试试编辑器

演示版运行在 grapesjs.com 浏览器存储上。里面的内容不会被影响。

价值

让你的无头 CMS 体验可视化编辑

无头 CMS 为您的应用提供了以 API 为先的内容基础。但它并不总是能让写内容的人在构建页面时看到页面。

结构化字段非常适合文章、产品记录或设置文档。但对于意义在于布局的页面——比如活动页面、专题巡演、价格比较——它们并不适合。对于这些,负责工作的人通常会要求相同的简短清单:

编辑们的需求

  • 可视化画布
  • 拖放
  • 可重复使用的页面部分
  • 响应式编辑
  • 模板
  • 组件配置
  • 实时预览

GrapesJS 提供那个可视化编辑层,而不必强制你更换 CMS。

缺口

无头CMS能给你内容。你的用户仍然需要一个编辑器。

无头架构将内容与呈现分开,这正是它为何会留下编辑空白:CMS知道字段,前端知道渲染,中间任何页面都不了解。添加可视化编辑层可以弥合这个空白,而不会拆除任一侧。

传统无头 CMS

  • CMS
  • 结构化内容
  • API
  • 前端

缺失

  • 可视化编辑
  • 拖拽
  • 页面组成
  • 响应式设计

无头 CMS + GrapesJS

  • CMS
  • 结构化内容
  • GrapesJS 可视化编辑器
  • API
  • 前端
同样的堆叠,只增加了一层。上面或下面都没变化。

添加可视化编辑,同时不放弃无头架构。

分工

为什么要给无头 CMS 添加可视化编辑器?

因为这三层各自擅长其他两个没有的,而可视化编辑层是唯一没人帮你发布的。编辑到位后,谁拥有什么。

  • 你的无头CMS

    你已经运行的内容基础设施。

    • 内容
    • 结构化数据
    • 媒体
    • 用户
    • 发布
    • APIs
  • GrapesJS

    你添加的就是可视化编辑图层。

    • 可视化画布
    • 拖拽
    • 组件
    • 区块
    • 样式
    • 响应式编辑
    • 可视化页面组成
  • 你的前端

    没有改变。它保留了之前拥有的一切。

    • 渲染
    • 路由
    • 应用逻辑
    • 用户体验
    • 部署

保留架构。升级编辑体验。

架构

无头 CMS 可视化编辑器的工作原理

四个图层,按存档经过的顺序排列。编辑器从不与你的数据库通信,也不会渲染你的生产页面——它通过你控制的端点读写一个文档。
  1. GrapesJS

    可视化编辑体验:画布、组件树、块、样式控制、设备宽度。

  2. REST / GraphQL

    通过REST、GraphQL或你自己的API实现持久化。存储适配器有两个功能——一个加载,一个保存。

  3. 无头CMS

    你现有的内容基础设施。它保留了架构、媒体库、用户和发布规则。

  4. 内容 API

    你的前端已经读取了 API 的交付。添加编辑器是增加一个写手,而不是第二个内容来源。

  5. 交付

    任何消耗你CMS API的前端。

    • Next.js
    • Nuxt
    • React Native

一个内容来源。多个前端。

看看编辑器如何嵌入应用程序
无迁移

你不需要更换你的CMS。

编辑层通过你前端调用的同一个API连接。无论你运行的是Strapi、Contentful、Sanity、Directus、Hygraph、Prismic、Payload,还是你团队自己编写的CMS,集成点都是两个端点加载并保存一个文档。

这些平台都可以通过各自的 API 集成,具体实现取决于该 CMS 的内容模型和 API。GJS.Market 并未为其中大多数平台发布官方集成,本页面也不会暗示相反的情况。

保留你的CMS。保留你的前端。添加一个更好的可视化编辑器。

兼容性

和你已经用的CMS兼容

下面的卡片描述了每个平台提供的集成表面,而不是支持声明。其中一个平台在 GJS.Market 目录中有一个社区存储插件;其余的都是你或实现合作伙伴基于其发布的 API 构建的集成。

  • Strapi

    REST ·GraphQL

    自托管,内容类型由你定义。编辑文档通常会成为页面集合类型的 JSON 字段。

  • Contentful

    REST ·GraphQL

    分开交付和管理的APIs。编辑器通过管理的API写入;前端继续读取交付的。

  • Sanity

    GROQ ·GraphQL

    Portable Text 和文档存储。编辑器文档会与你已有的字段并存,而不是替换它们。

  • Directus

    REST ·GraphQL

    这是本列表中唯一已经在GJS.Market上发布社区存储插件的平台。

    查看插件
  • Hygraph

    GraphQL

    GraphQL优先,所以适配器是一个查询和一个变异,而不是两个URL。

  • Prismic

    REST

    基于切片的内容。当你保持块集与切片对齐时,编辑器块会干净利落地映射到切片上。

  • Payload

    REST ·GraphQL

    代码定义的集合,因此编辑器写入的字段声明在同一个仓库中。

  • 定制CMS

    REST ·GraphQL ·定制

    任何能响应加载请求并接受保存请求的设备。两个端点就是整个合同。

目录中唯一一个以CMS命名的适配器

Directus Storage 是一个免费、由社区发布的 GrapesJS 存储插件,源自 Silex 项目。它确实是一个非常有用的参考资料,说明适配器的形状——认证命令、加载、保存——但其自身列表指出它主要针对较旧的 Directus SDK,因此应将其视为阅读起点,而非支持的产品。

Directus Storage
内容模型

你的CMS。你的内容模型。

可视化编辑器只有在无头系统中生成的内容仍然符合你设计的模式时才有用。在 GrapesJS 中,自定义组件类型声明了它自己的可编辑 traits——而这些 traits 就是你的 CMS 字段名称所在。

  1. GrapesJS 组件
  2. 可视化区块
  3. 你的内容结构
  4. CMS

实例演练

hero-section

字段类型
  • title字符串
  • subtitle文本
  • image媒体
  • button对象
  • metadataJSON
一个组件类型,即编辑器看到的traits,以及你CMS条目已经声明的字段——故意用同样的名称。
在组件上声明相同的字段javascript
editor.DomComponents.addType('hero-section', {
  model: {
    defaults: {
      // Traits become the fields your CMS entry already has.
      traits: [
        { name: 'title',    label: 'Title' },
        { name: 'subtitle', label: 'Subtitle' },
        { name: 'image',    type: 'image' },
        { name: 'ctaHref',  label: 'Button link' },
      ],
    },
  },
});

可视化编辑器应该适应你的内容模型——而不是强迫你的CMS适应编辑器。

存储格式

你应该储存什么?

同一个编辑器会有两个表示,它们回答不同的问题。一个可以重新打开进行编辑;另一个可以渲染。大多数制作设备会将两者分别放在不同的列,这更多是设计决策而非规则。

  • 项目文件

    1. 项目/组件数据
    2. 可编辑来源
    3. 以后还能再打开
    editor.getProjectData()

    组件树、样式、页面和资源作为结构化数据。这是编辑器重建会话原貌所需的,这是唯一能在第二轮编辑中完整保存的表示。

    在以下情况下使用: 有人会在编辑器里再次打开这个页面。

  • 渲染后的标记

    1. HTML + CSS
    2. 渲染输出
    3. 预览/发布
    editor.getHtml() + editor.getCss()

    标记和样式表都从同一树生成。这就是预览版 iframe、静态导出或发布流程所消耗的,且无法可靠地重新导入为编辑会话。

    在以下情况下使用: 下游必须有渲染,不需要编辑器。

存储编辑器再次打开时需要的那种表示,再生成前端或发布流程需要的输出。

编辑器功能

你的编辑们所需的一切

引擎自带什么,插件添加了什么,以及什么仍是你应用的任务。当你在界定工作范围,而不是单纯看功能列表时,这种区别才是关键。

  • 拖拽GrapesJS 核心
  • 组件GrapesJS 核心
  • 区块GrapesJS 核心
  • 样式管理器GrapesJS 核心
  • 响应式编辑GrapesJS 核心
  • 图层GrapesJS 核心
  • 素材插件
  • 模板插件
  • 预览你的应用
由谁提供你的应用GrapesJS 核心插件

GrapesJS不发布CMS、主机、用户账户和权限模型。这些都留在你的CMS和你的应用里。

按内容类型选择

CMS 编辑器还是页面构建器?

这不是整个产品一次性做出的决定。这是根据内容类型做的决定,大多数团队最终会同时运行两者。

  • 结构化内容编辑器

    你的CMS本身基于表单的编辑,由模式驱动。

    最适合

    • 文章
    • 文本
    • 结构化字段
    • 简单内容
  • 可视化页面构建器

    画布,布置即内容。

    最适合

    • 着陆页
    • 营销页面
    • 自定义布局
    • 可视化网站
    • 复杂页面组成

在结构重要的地方使用结构化字段。在布局和构图重要时使用可视化编辑。

工作流程

发布前预览内容

编辑和发布是两个独立的事件,无头设置使得执行这一点变得容易:草稿文档和发布文档是不同的行,由不同的标记读取。

  1. 1

    CMS 草稿

    该条目已存在于你的CMS中,且处于草稿状态。

  2. 2

    GrapesJS 编辑器

    有人在画布上构图。

  3. 3

    预览

    前端会在每个设备宽度处渲染草图。

  4. 4

    审阅

    第二个人会阅读页面,访客会看到。

  5. 5

    批准

    批准会由你的应用记录,而不是编辑。

  6. 6

    发布

    你的CMS负责推广草图,前端则重新验证。

人工审核

评审应该能够在不同范围内切换

  • 桌面
  • 平板
  • 移动端
  • 草稿
  • 发表

编辑和发布分开。

多渠道

创造一次。到处投递。

这就是你选择无头 CMS 时已经获得的优势,添加可视化编辑器不会消耗这个优势——只要编辑器写的内容保留在内容 API 中,而不是模板中。

无头CMS

一个内容 API,所有频道都能读取

  • 页面
  • 区块
  • 素材
  • 网站

    Next.js

  • 移动端

    React Native

  • 应用

    Nuxt

每个通道用自己的渲染器解释相同的有效载荷。

无头架构允许相同的内容基础设施服务不同的前端。

多租户

构建一个多租户无头 CMS 编辑器

如果编辑器是产品的一部分,而非内部工具,每个客户组织都需要自己的页面、资源和模板——而且绝不能看到别人的。

你的应用

这种分拆是在服务器上强制执行的

  • 组织A

    • 页面
    • 素材
    • 模板
    • 权限
  • 组织B

    • 页面
    • 素材
    • 模板
    • 权限
  • 组织 C

    • 页面
    • 素材
    • 模板
    • 权限
一个编辑,一个内容 API,按组织单独数据。

GrapesJS 本身不支持多租户。租户隔离、每租户品牌和发布规则都是你的应用负责,每次存储调用都必须在服务器端进行范围限制。

白标

拥有完整的编辑体验

如果你的客户使用编辑器,它应该看起来像是你产品的一部分。面板、图标集、块库和模板都可以配置,周围的应用程序提供了编辑器没有的功能。

  • 自定义 Logo
  • 自定义配色
  • 自定义界面
  • 自定义区块
  • 自定义模板
  • 角色
  • 权限

角色和权限之所以在列表中,是因为品牌编辑器需要它们——而不是因为编辑器提供。它们是由你的后台执行的。

生态系统

构建你的无头CMS编辑器栈

引擎只是整体层面的一个层级。下面是整个阶梯,每个层级都有真实的标签:哪些内容在GrapesJS中发布,哪些可以在GrapesJS上购买或下载,哪些仍属于你自己的作品。

  1. GrapesJS 核心开源
  2. CMS 集成你自己实现
  3. 区块GJS.Market
  4. 模板GJS.Market
  5. 素材GJS.Market
  6. 存储GJS.Market
  7. 表单GJS.Market
  8. SEOGJS.Market
  9. 导出GJS.Market
  10. 发布GJS.Market
  11. 权限与审计你自己实现

有两个梯级被故意标记为你自己的作品。CMS集成是针对你内容模型的,目录没有权限或审计日志插件——实现合作伙伴可以同时构建两者,但这里没有产品支持。

真实上架商品

对于无头配置来说重要的插件

下面的每个商品都经过实时目录的核对,并发布并可购买。价格是在制作时从市场读取的,所以你看到的就是今天商品所显示的内容。

按用例划分

选择合适的插件栈

五个起始套装,均来自相同的经过验证的商品列表。它们都不是一键购买的捆绑包——而是针对每种产品不断出现的组合。

价格来自制作时的实时目录。免费列表会被标记。

构建与扩展

不要自己做所有CMS功能

上面梯子上的每个能力都是可以构建的。问题是,当已有维护的扩展时,哪些能力值得你的团队投入时间。

全部自建用插件扩展
更多发展更快的实现
更多的维护可重复使用扩展
构建每一个功能只添加你需要的部分
内部工具现成解决方案

从可视化编辑器开始。随着产品增长,逐步添加功能。

自建 vs 采用

从零开始构建一个无头的CMS编辑器,而不是GrapesJS。

这不是供应商比较——而是范围比较。每一行都是可视化编辑器需要的子系统,唯一的问题是你的团队是否编写它。

能力从零开始GrapesJS
画布自己写内置
拖拽自己写内置
组件自己写内置
区块自己写可扩展
样式自己写内置
响应式编辑自己写内置
图层自己写内置
素材自己写可扩展
模板自己写可扩展
存储自己写可扩展
导出自己写可扩展

“可扩展”意味着子系统存在且有扩展点——块集、模板库、素材后端、存储目标和导出格式均由您提供,无论是从目录还是您自己的代码中。目录声明已验证 2026-09-03。

构建你的CMS产品。不要重建可视化编辑器引擎。

异议

为什么不直接用我的CMS自带编辑器?

通常你应该这样做。内置编辑器已经集成、已获得权限且熟悉,对于结构化内容通常是正确的解决方案。当你需要内置编辑器不负责的事情时,专门的可视化编辑层就更有用:

  • 页面本身更丰富的可视化编辑
  • 与你设计系统匹配的定制区块
  • 在每个设备宽度下检查响应式布局
  • 自定义组件绑定到你自己的内容类型
  • 与产品其他部分的深度集成
  • 一个客户可以使用的白标界面
  • 自定义审稿与发布工作流程
  • 独立于任一前端

这并不是说内置编辑器较差。而是认为编辑界面和内容基础设施是可以分离的决定。

保留你的CMS。选择你自己的编辑体验。

实现

如何构建一个无头的 CMS 可视化编辑器

  1. 1
    第一步

    定义你的内容模型

    决定编辑器可以创建什么内容,以及它写入哪些现有内容类型。这个决定会限制后续所有内容,所以请在编写任何编辑器代码之前就做出。

  2. 2
    第二步

    配置GrapesJS

    设置组件类型、块库和样式控件,编辑者能获得——同样重要的是,还要设置他们无法控制的。

  3. 3
    第三步

    连接存储

    通过REST、GraphQL或你自己的API持久化项目文档,并通过你CMS已经发布的会话进行身份验证。

  4. 4
    步骤4

    构建预览

    用你的真实前端渲染草稿,只有认证审核员才能达到的路径。其他内容就是对另一个网站的预览。

  5. 5
    第五步

    接入发布流程

    将草稿、审阅和生产状态与你的CMS已有的工作流程连接起来,并在申请中记录谁批准了什么。

快速入门

开始建造

最小的编辑器,能与内容 API 通信。两个端点,一个 autosave 策略,以及两个调用分别代表每个内容。

npm install grapesjs
将编辑器初始化为你的API。javascript
import grapesjs from 'grapesjs';
import 'grapesjs/dist/css/grapes.min.css';

const editor = grapesjs.init({
  container: '#editor',
  height: '100vh',
  // Load and save the project through your CMS API. Both endpoints are
  // yours: GrapesJS only decides when to call them.
  storageManager: {
    type: 'remote',
    autosave: true,
    stepsBeforeSave: 10,
    options: {
      remote: {
        urlLoad: '/api/cms/pages/home',
        urlStore: '/api/cms/pages/home',
        // Send the session the CMS already issued — never a CMS admin token
        // that reached the browser.
        fetchOptions: (opts) => ({ ...opts, credentials: 'include' }),
      },
    },
  },
});

// The two representations, whenever you need them.
const project = editor.getProjectData();          // re-openable source
const output = { html: editor.getHtml(), css: editor.getCss() };

请沿用 CMS 已经签发的会话。任何抵达浏览器的 CMS 管理员令牌,等于把它交给了所有访客。

传输

连接任何API

GrapesJS 不在乎另一端是 REST、GraphQL 还是你们团队发明的东西。存储适配器既是加载函数,也是存储功能,以下内容都是你在其中做出的选择。

  1. GrapesJS
  2. 存储适配器
  3. REST / GraphQL
  4. 无头CMS

适配器能覆盖的内容

  • 加载项目

    获取一页存储的文档,启动时交给编辑。

  • 保存项目

    最好是写回去,最好是对草稿的更新,而不是更新已发表的条目。

  • 自动保存

    节省变更次数或定时器,让端点能容忍频繁被调用。

  • 素材

    通过你的媒体管道上传,并返回素材管理应该显示的URL。

  • 预览

    把草稿信息放在前端,用代币形式公开,别对其他人。

  • 发布

    一个独立的授权终端。永远不会和存档判定一致。

同一个适配器,针对GraphQLjavascript
// A storage adapter is just two functions, so GraphQL needs no extra plugin.
editor.Storage.add('cms', {
  async load() {
    const res = await gql(`query Page($id: ID!) { page(id: $id) { project } }`);
    return res.page.project;
  },
  async store(data) {
    await gql(`mutation Save($id: ID!, $project: JSON!) {
      updatePage(id: $id, data: { project: $project }) { id }
    }`, { project: data });
  },
});

GJS.Market 上没有发布任何 GraphQL 适配包——上面的片段是整个集成,因此不需要任何集成。

两个函数,就是可视化编辑器与内容 API 之间的全部契约。

上线准备

适量级无头 CMS 编辑器

团队在工作原型和客户触摸的物品之间进行的清单。这里没有任何特别的东西;所有这些至少都会被跳过一次。

  • 编辑器

    • 编辑器生命周期:在路由更改时干净利落地初始化和销毁
    • 自定义组件类型在任何项目加载前注册
    • 只有这个编辑器实际使用的插件被捆绑了
  • 数据

    • 项目持久性是用真实的API验证的,不是模拟
    • 自动保存间隔调整,保存状态可见
    • 修改会被保留,所以坏的存档是可以恢复的
  • 内容

    • 在写入任何内容之前,先对服务器进行模式验证
    • 内容模型已通过组件类型进行文档和版本管理
    • 结构化输出在发布时重新生成,而不是从编辑器缓存
  • 安全性

    • 每次加载、保存和上传都进行API认证
    • 服务器端对特定页面的授权进行了检查
    • 上传验证:类型、大小和目的地
    • 租户隔离是在查询中强制执行的,而不是在界面中
  • 工作流程

    • 草稿状态与CMS中已发布状态区分开来
    • 预览路由已认证并被排除在索引之外
    • 复查记录的步骤,记录在谁和时间
    • 发布端点独立、授权且可审计
安全性

安全考量

可视化编辑器是写入你内容基础设施的路径,因此它继承了该路径已有的所有规则——并在表面添加文件上传和任意标记。

  • 服务器授权

    每次加载、保存、上传和发布都会针对服务器上的会话进行该特定页面的检查。

  • 在查询中隔离租户

    数据库查询中按租户划分的范围。读取后应用的过滤器不是隔离。

  • 为 API 做鉴权

    编辑器使用你的 CMS 发出的会话。浏览器代码中不应包含任何管理或管理员令牌。

  • 验证上传内容

    检查服务器端的类型、大小和目标,尽可能从不同的来源提供用户媒体。

  • 净化内容

    编辑者可以放置自定义代码。有意识地决定谁可以使用,并对呈现给访客的内容进行净化。

  • 保护发布端点

    一个独立的端点,有自己的权限检查,所以能编辑不等于能发布。

切勿仅依赖客户端权限。隐藏面板是用户界面的决定,而非安全控制。

性能

性能考量

编辑器运行时是开发者工具,仅属于编辑路径。该架构中几乎所有性能问题都源于让数据泄漏到访客加载页面。

  • 按需懒加载编辑器

    通过编辑路线导入。面向访客的页面不需要编辑包。

  • 分页加载大型素材库

    媒体库可以无限增长。分页并在服务器端搜索,而不是整张加载。

  • 只捆绑你使用的插件

    每个插件在启动时注册组件、命令和面板。未使用的插件每次打开都会消耗时间。

  • 不要让发布的页面播放时长

    发布的输出应该是前端渲染的标记和样式,不要附带编辑器代码。

  • 故意缓存API响应

    交付的API可以硬缓存;预览后面的草稿读取通常不能。将它们分开处理。

这里没有引用任何时间,因为本页尚未测量过任何时间。用你自己的区块集来衡量你自己的编辑器——区块库和素材数量主导了数字。

FAQ

关于无头 CMS 编辑器的问题

什么是无头 CMS 编辑器?

它是人们用来创建无头 CMS 内容的界面——即位于内容 API 之上层。在无头架构中,编辑界面不绑定前端,因此它可以是 CMS 自己的基于表单的编辑器,也可以是你添加的可视化编辑器,或者两者兼具,针对不同内容类型。

什么是无头 CMS 可视化编辑器?

可视化编辑器是编辑者在构图时看到页面的编辑器:画布、可拖拉的部分、样式控件和设备宽度,而不是字段列表。它仍然会写入内容 API,因此内容保持无头。

我可以用无头的CMS使用GrapesJS吗?

是的。GrapesJS 通过存储适配器得以保存——一个加载函数和一个存储函数,指向你的 API。任何能返回文档并接受更新的 CMS 都可以支持它。

我可以和Strapi一起使用吗?

GJS.Market 没有官方的 Strapi 集成,也没有 Strapi 插件。通常的做法是在页面内容类型上设置 JSON 字段,编辑的存储适配器通过调用者的会话调用 Strapi 的 REST 或 GraphQL API。

我可以和Contentful一起使用吗?

没有官方集成。Contentful 将 APIs 的交付和管理分开,因此集成通过服务器读取传递和管理写入——从不在浏览器中暴露管理令牌。

我可以和Sanity一起使用吗?

没有官方集成。Sanity 的文档存储可以将编辑器的项目文档与你已有的字段并存,适配器通过 Sanity 的 API 读取并修补该文档。

我可以和Directus一起使用吗?

Directus 是唯一在 GJS.Market 上发布社区存储插件的平台。它是免费且有用的参考资料,但其自身列表注明它主要针对较旧的 Directus SDK,因此计划更新或重写部分内容。

我可以和Payload一起使用吗?

没有官方集成。Payload 的集合是用代码定义的,因此编辑器写入的字段可以声明在与编辑器相同的仓库中,这使得适配器异常简短。

我可以连接一个定制的CMS吗?

是的,而且这通常是最简单的情况。如果你的后端能回答一个文档的加载请求并接受保存请求,它就能支持编辑器。编辑器本身并不假设某个特定产品。

我可以用REST APIs吗?

是的。内置的远程存储需要加载URL、存储URL以及你的取用选项,所以REST集成可以通过配置而非代码实现。

我可以用GraphQL吗?

可以。注册一个自定义存储适配器,它的 load 函数执行一次查询,store 函数执行一次 mutation。不需要专门的 GraphQL 插件,GJS.Market 上也没有发布这样的插件。

我可以把GrapesJS项目存成JSON吗?

是的——项目文档是结构化数据,通常放JSON列或字段。如果页面在编辑器中被重新打开,这就是需要保留的表示方式。

我可以生成HTML和CSS吗?

是的。编辑器会从同一个组件树中展示渲染的标记和样式表,这也是预览版 iframe、静态导出或发布流程所消耗的。

我应该存储HTML还是项目数据?

如果页面将再次编辑,请存储项目数据,因为这是唯一能忠实重建会话的表示方式。生成用于渲染和发布的标记。许多生产环境会将两者分别保存在不同的字段中。

我可以创建自定义区块吗?

是的。块通过块管理器注册,块可以插入你定义的任何组件类型——包括绑定到你自己内容模式的组件类型。

我可以把区块映射到我的CMS模式吗?

是的。定义一个组件类型,其traits使用你的CMS字段名,然后让适配器将这些traits读入条目。保持两侧名称一致,是让映射变得简单的关键。

我能做一个可视化的落地页构建器吗?

是的,而且这是最常见的初始使用场景。活动页面是结构化字段最弱、画布最强的地方。

我能构建一个多租户的CMS编辑器吗?

是的,但租用权是你的应用程序的,不是编辑器的。GrapesJS 没有租户的概念;每个存储和素材调用都必须在服务器上有范围限制。

我能做一个SaaS页面构建器吗?

是的。这意味着要在编辑器上添加账户、计划、限制和发布——这些都存在于你的产品中,而非编辑引擎中。

我可以创建一个白标编辑器吗?

是的。面板、图标、样式、块库和模板都可以配置,所以编辑器可以作为你自己产品的一部分来阅读。

我可以添加自己的素材管理吗?

是的。素材管理器有一个上传钩子,可以指向你的媒体管道或CDN。有针对常见托管上传器的插件。

我可以创建、草稿和发布工作流程吗?

是的,使用你CMS已有的状态。继续在独立授权端点发布,这样能编辑不代表能发布。

我可以用插件来扩展编辑器吗?

是的。插件可以添加组件、块、命令、面板和存储目标。GJS.Market 目录涵盖块、模板、素材、存储、表单、SEO、导出和发布;权限和审计日志不涵盖,仍为自定义工作。

服务

需要帮忙构建你的无头CMS编辑器吗?

需要把 GrapesJS 接入 Strapi、Contentful、Sanity、Directus、Payload 或自研 CMS?我们可以协助编辑器集成、自定义组件、存储适配、插件配置和上线工作流。

  • 编辑器集成
  • 自定义组件
  • 存储适配器
  • 插件配置
  • 生产工作流程
下一步

让你的无头CMS获得应有的编辑体验

保留你现有的CMS、内容模型和前端架构。添加GrapesJS作为可视化编辑层,然后随着产品增长用GJS.Market插件扩展。

从这里开始

打造你的无头CMS编辑器

告诉我们CMS、内容模型以及你们团队需要撰写的页面,并获得一个有范围的设置。

开始搭建
扩展

浏览插件

存储、模块、模板、资源、表单、SEO、导出和发布——这些环节你不必亲自编写。

浏览插件
借助帮助

获取实施帮助

集成、定制组件、存储适配器及其周边的生产工作流程。

获取实施帮助

你的 CMS。你的前端。你的编辑器。