你的产品
你的客户登录的应用程序。下面所有内容都是通过它访问的,这也是为什么构建者更像是一个功能而非工具。
区块
风格
原厂演示,未造型,无品牌。这是每个白标构建的起点——也是你的客户绝不应该看到的。
演示只有在点击后才加载到嵌入的帧中,因此页面本身保持浅色。
白标通常被称为标志交换。事实并非如此。请比较下面的两个框架:同一画布,相同的拖放功能,相同的风格控件——从使用者角度看,这两种产品完全不同。
要素
性质
之前
之后
用户应该感觉自己在使用你的产品——而不是嵌入其中的第三方编辑器。
白标页面构建器是一种可视化页面编辑系统,可以集成到其他产品中,并根据其品牌、用户体验和业务规则进行定制。
这个词源自制造业,指的是白标产品由一家公司生产,并以另一家公司名义销售。应用于软件时,这意味着编辑引擎是你团队选择的依赖,客户所感知的一切——界面、词汇、内容库、谁可以做什么的规则——都属于你。因此,白标页面构建器与其说是你安装的产品,不如说是你组装的产品。
白标到底涵盖了哪些
白标不仅仅是更改一个标志。上面的每一项都是关于体验中某层归属的决定——而一个仅停留在标志上的建设者,依然是别人的工具。
白标构建是一堆图层,值得精确判断视觉编辑引擎能提供哪些图层,哪些不能。从上而下阅读这些图层:客户看到的内容,直到发布页面最终的位置。
你的客户登录的应用程序。下面所有内容都是通过它访问的,这也是为什么构建者更像是一个功能而非工具。
身份、语气和词汇。应用到编辑器壳上,块名和用户读取的每个字符串。
可视化编辑引擎:画布、组件、拖放、样式控制、响应式编辑、序列化。开源、自托管,且可自定义至面板层面。
模块、模板、预设、存储适配器、资产集成和导出命令,填补核心故意留下的空白。
项目、页面、修订版和资源,都在你的模式和数据库中。编辑器会序列化项目;项目写在哪里由你决定。
账户、组织、角色、权限、账单以及编辑对话的API。没有任何编辑引擎能提供这些,因为这是你的业务逻辑。
客户发布页面的渲染、托管、缓存、域名和证书。
编辑引擎是你不必构建的那一层。其他每一层,你的产品才是真正与众不同的地方——这也是不值得花一年时间重建已经解决的层面的好理由。
同样的堆栈,逐项列出。三条通道:引擎开箱即用的、扩展能提供的内容,以及只有你的应用能拥有的。第三条是诚实的通道——企业买家会在这里提问。
右侧通道没有任何功能是编辑器的缺口——这些功能取决于你的账户、租户模式和基础设施,没有编辑引擎能帮你决定。
你的客户从不打开编辑器。他们打开你的产品,进入他们的页面,选择模板开始编辑——而编辑引擎恰好是在这个过程中绘制画布的。
你的客户实际经历的旅程
GrapesJS 可以在客户与产品体验互动的同时,在幕后工作。
你的产品,构建器只是众多功能中的一个。
认证、组织、计费、用户和权限——每个编辑会话运行的上下文。
页面构建功能:项目加载、保存、模板选择、发布触发器。
可视化编辑层——画布、组件、块、图层、样式、资源和命令。
GrapesJS 负责可视化编辑层。你的应用程序负责围绕其的业务逻辑——而两者之间的边界是整个构建中最重要的设计决策。
看看它是怎么运作的你的应用会带到边界上什么
如果多个客户使用你的开发商,租赁问题就不再是实施细节。每个组织都需要自己的页面、自己的资产库、模板和品牌——并且在结构上无法访问他人的。
你的平台
拥有租户边界,并对每一个请求执行
组织A
组织B
组织C
每个项目、资产和模板行都被指定为组织范围,且范围是应用在服务器端的——而非通过浏览器过滤。
租户的页面是你数据库中的行。编辑器一次加载一个项目,然后通过你的API写回去。
上传内容落在每个租户的前缀或桶中,因此一个客户的媒体永远不会出现在另一个客户的拣选器中。
模板可以是全球性的、针对某个计划的,或者只针对某个组织的私人模板,而这通常正是计划升级真正解锁的。
颜色、字体和标志会根据组织解析,因此代理机构的客户在同一部署中都能看到自己的身份。
租户页面发布地点——路径、子域还是自定义域——是你的应用解析的租户配置。
GrapesJS 没有内置租户概念。它一次编辑一个项目;围绕该项目的隔离、范围和权限检查都已在你的应用中实现,并由后端强制执行。
定制化比大多数团队预期的更深。这四个层级是根据可见度排序的,而不是按工作量来划分——最后一个层级区分了重新品牌化的工具与一款感觉原生的产品。
每个人一开始的那层。必要,单靠它永远不够。
画布周围的镀铬。分镜可以被你自己的部件重新排列、替换或渲染。
用户实际能在页面上放置什么。这就是构建器不再泛泛的地方。
文字。一个到处读你词汇的用户,根本没注意到你下面有个引擎。
编辑器的接口字符串可转换,面板可配置,因此前两个层是配置而非分支。核心是BSD-3-Clause授权且自托管的,这正是更深层次成为可能的原因。
一个向团队发货的构建者需要不止一种用户类型。这五个角色涵盖了大多数产品;名字的重要性不如它们分别对应到不同的可见面板、可用模块和发布权这一事实。
完全访问,包括计费和删除
用户、设置与发布
布局、样式与模板
批准区块内的内容
只读访问和预览
许可如何传达到画布上
请自上而下阅读链条:前三步发生在你的应用中,只有后三步是编辑器配置。隐藏面板是已经做出并强制执行的决策的渲染结果——仅存在浏览器中的权限不算权限。
在单用户工具中,编辑和发布是同一个操作。而销售给团队的产品则是拥有独立权利的独立状态——而这种分离通常是企业买家首先询问的问题。
你的数据库里有一个页面,但还没有公开代表。
任何拥有本项目编辑权的人都在画布中工作。
草稿作为预览分享,评论由你的产品处理。
拥有批准权的用户签署。状态变更由你记录。
你的基础设施负责渲染和发布页面。编辑的角色已经结束。
标记阶段是授权检查应进行的地方。
编辑者可以创作内容,而只有授权用户才能发布——一句话决定了许多企业合作的决定。
核心设计了一个空的区块调色板:一个通用的区块套装在每个产品中都是错误的。你放进那个调色板里的选项是整个构建中最针对产品具体的决定。
你的开头部分,包含产品实际使用的字段。
计划表可以读取你自己的定价数据。
社会认同体现在你的品牌呈现方式上。
一个用户无法无意中破坏的可重复网格。
问答对,可在已发布页面中展开。
一个有线到你终端的表单,而不是第三方的。
转换块,锁定你的按键样式。
一个在每一页保持一致的共享页脚。
模板是构建者教导用户什么是好的方式。空白画布令人望而生畏;围绕客户工作构建的模板集是产品特性。
值得发送的模板类型
这些是建筑商通常提供的模板,而不是目录列表。你的套装内容应与客户最常发布的内容相符。
不要给用户一个通用编辑器。给他们一个围绕你的产品设计的编辑器。
对于代理机构和网站平台来说,发布的带有客户自有域名的页面就是产品。这完全是基础设施问题——值得尽早设计,因为将域名路由改装到实时构建器中并不愉快。
将主机名存储在工作区,验证所有权,然后将该租户发布的请求路由到该租户的发布页面。
每个客户域的证书发布和更新都是平台的责任,无论你是自己运行还是委托给主机。
有些团队从自己的数据库中渲染页面;另一些则将生成的输出推送到静态主机。两种模式都有效,且一个插件系列已经自动化了第二个。
从一开始就给每个页面提供平台托管的预览网址,这样审核和批准就不会在DNS上等待。
没有任何可视化编辑库提供域名托管。GrapesJS 会发布页面;DNS、证书、路由和缓存则会保留在你的基础设施或托管服务提供商中。
一旦两个人能编辑同一个页面,总有人会问是谁改的。在设计保存发布时添加活动轨迹成本低,重建成本高。
活动
每条记录该记录的内容
示例行。GrapesJS 没有审计日志;当应用处理保存、审批或发布时,记录是它写的,这也是唯一知道哪个用户在行动的地方。
把栈看作构建顺序。每个层级要么由引擎提供,要么作为插件提供,或者只有你的团队能完成——诚实地判断哪种工作是谁,这才是让估算能经得起项目联系的关键。
两个层级没有统一的解决方案,这是有意为之而非疏忽:角色和审计日志依赖于你的身份模型和数据库,所以它们属于应用工作。如果这是你们团队不愿意单独构建的部分,这正是实现服务存在的意义所在。
下面所有的商品都是GJS.Market上的真实产品,按白标组装中的工作内容分类。
这三种组合反复出现。它们都不是捆绑的——它们只是起点,每一个都需要你围绕它们申请。
价格是市场在建造时的标价,并用于定位。
GrapesJS 提供了可视化编辑的基础。GJS.Market 插件可以添加专门功能,而无需团队内部构建所有功能。以下两种方案都是合理的——问题在于栈中哪些部分是真正的差异化。
逐个功能,看你自己写的内容,对比成熟引擎已经暴露的内容。标记为应用层的行是这张表中诚实的一半:编辑引擎不能拥有它们,所以无论如何都得承担。
| 能力 | 从零开始 | GrapesJS |
|---|---|---|
| 视觉画布 | 建造 | 内置 |
| 拖拽 | 建造 | 内置 |
| 组件 | 建造 | 内置 |
| 区块 | 建造 | 可扩展 |
| 造型 | 建造 | 内置 |
| 响应式剪辑 | 建造 | 内置 |
| 定制UI | 建造 | 可扩展 |
| 资产 | 建造 | 可扩展 |
| 存储 | 建造 | 可扩展 |
| 权限 | 建造 | 应用层 |
| 多租户 | 建造 | 应用层 |
| 发布 | 建造 | 应用层 |
| 插件 | 建造 | 可扩展 |
评判反映了当前版本的重新验证 2026-09-02。“应用层”意味着该能力依赖于你的账户和基础设施,而不是说缺少它。
建立你的商业逻辑和品牌体验。不要重建视觉编辑引擎。
三个相关的决策被当作一个来讨论。它们是叠加而非竞争:大多数产品最终会按这个顺序完成这三项。
六种反复出现的形状。它们的区别不在于所需的编辑器,而是周围的结构。
一旦建造商归你所有,围绕它的商业关系也将归你所有。如何包装它是一个商业决策,而非技术性决定——但在租赁模式尚未确立之前,这值得做出决定,因为规划和限额是租赁问题。
传统的四层结构,旨在使租赁影响具体化,而非规定价格表。
一个工作区,小页面限制,平台托管的预览URL。
更多页面,完整模板集,自定义域名。
多个名额、多个职位以及发布前的审批步骤。
多个组织、审计跟踪、自定义模块和支持条款。
仅供说明。哪些内容属于哪个层级取决于你的市场——但请注意,前半部分的许可和租赁功能占据了该阶梯。
您可以掌控价格、套餐和客户关系。
白标构建提出了封闭编辑器无法满足的要求。你需要改变界面,在自己的基础设施上运行,并与厂商从未听说过的系统集成。核心是BSD-3-Clause授权且可自托管,这正是实现这些功能的原因。
界面是标记和配置,你可以读取、替换和扩展——而不是带有主题的 API 黑匣子。
编辑器运行在应用运行的地方,所以项目和资源永远不会离开你的基础设施。
一个有文档的插件架构,加上一个现有插件的生态系统,可以适应而不是从中开始。
存储、资产和命令是你自己服务的接缝。
部署、升级和数据定位由你根据时间安排来决定。
你可以读取你发货给客户的代码,这越来越多是采购需求,而非偏好。
编辑器是一个浏览器库,所以它会去你应用已经存在的地方。这些页面涵盖了框架下的机制——挂载、清理,以及将编辑器状态排除在渲染循环之外。
构建者有两个几乎没有共同点的运行时,把它们当作一个来处理是这类产品中最常见的性能错误。
用户打开编辑器时加载编辑包,而不是打开仪表盘时加载。
编辑器管理自己的树。镜像到全局存储时,每次按键都会重新渲染你的应用。
拥有数千张图片的租户需要一个分页、可搜索的选择器,而不是一个冗长的列表。
富文本引擎、代码编辑器和图片工具值得等到需要它们的面板打开时再使用。
编辑需要的内容都不属于访客下载的已发布页面的捆绑包。
图片、关键的CSS和已发布页面的缓存由你的渲染层决定,而你拥有完全的控制权。
创作环境和发布网站不需要有相同的运行时间要求。
多租户开发商接受不受信任的内容,生成别人加载的页面。这两边都值得关注,大部分工作都在你这边。
项目加载、保存、资产上传和发布都是认证会话会接触到的端点——都值得如此对待。
在服务器上重新检查界面已经隐藏了什么。隐藏按钮是用户体验功能,不是访问控制。
按组织范围限制每个查询,且优先考虑一个无法省略的范围,而不是每个开发者必须记住的范围。
检查服务器端的类型、大小和扩展,尽可能从不同的来源提供用户媒体。
可视化构建器可能会生成任意的标记。请有意识地决定是否允许使用自定义脚本,并据此进行净化处理。
发布改变了公众所看到的内容。限制速率,明确授权并记录触发者。
保存的项目是用户输入。在存储或重新渲染前,验证其形状。
屏蔽列表和面板集是浏览器可以被欺骗的配置。
这只是构建者的起始清单,不是完整的安全程序,而且没有任何架构是从结构上就安全的。把白标构建器当作其他接受用户内容的多租户应用一样对待。
实现
需要帮助在产品中集成、品牌化或扩展 GrapesJS?探索实现服务,涵盖定制集成、UI 定制、插件和生产支持——包括目录无法涵盖的两级技术栈。
从GrapesJS的视觉编辑引擎开始。添加你的品牌、内容系统、权限和基础设施,打造一个感觉原生于你的产品的页面构建器。
你的品牌。你的编辑器。你的客户。你的基础设施。