“插件”这个名词在读的各位 Develper 不会太陌生,大家肯定使用过浏览器插件,代码编辑器(VSCode、JetBrains 系列)插件,浏览器或编辑器好不好用就看插件是不是够丰富,所谓插件才是灵魂,富文本编辑器也不例外,开发编辑器实际上的大部分时间也是在做插件,所以从本篇开始捋一下富文本编辑器的插件系统,插件系统的相关内容有些多,本人规划的雏形预计至少分为 3 到 4篇:
- 概览(包含插件概念、基本的生命周期、相关框架)
- 插件注册流程(预渲染逻辑、事件注册与委托机制)
- 插件渲染与事件流转
本篇算是一个概览篇,讲讲插件的大体情况。
什么是插件
插件(Plugin)是指一种可以增强或扩展已有软件功能的组件或模块。它们通常是以独立的方式编写,可以被动态地添加到主应用程序中,从而提供额外的功能和特性。 —— ChatGPT
个人理解:插件是一个相对的名词,它必须有一个主体容器/应用,其他独立的组件以插入的形式扩展主体容器/应用。
编辑器主体和插件的关系:
- 插件依赖于编辑器,无法单独使用
- 编辑器可以在没有插件的情况下运行,但功能将受到限制
框架
关于 Slate 与 Slate-angular
要讲后续的一些内容不免会介绍到这两个编辑器框架:Slate 和 Slate-angular (已开源,我们团队自研,但跟我关系不大),所以下面结合官方与工作中一些体会顺带的过一下,做下简介。如果有兴趣看接下来的几篇内容,这节可以过一下,反之可以跳过。
Slate 简介
Slate 是一个完全可定制的富文本编辑框架,提供核心编辑器和插件扩展机制。
其中提供核心能力:
- 制定文档结构规范:支持嵌套文档模型
- 灵活的插件机制:可定制可移植的独立插件,编辑器的核心都是以插件的方式创建的
- 协同编辑基础方案:数据模型、交互方案
- 丰富的工具函数:基于原生 DOM API 的封装的函数、操作文档数据的函数
Slate-angular 简介
Slate-angular 基于 Slate 扩展 Angular 视图层框架(官方只支持 React), Demo ,作者声称比 React 实现更简洁。
其中提供的核心能力:
- 提供插件的组件渲染机制
- 重写和扩展编辑器核心编辑能力
- 提供更丰富的事件监听
- 提供更丰富工具函数
构建编辑器
上面说了主体是编辑器,插件的一切活动都围绕此,所以也要介绍一下编辑器是什么样,如何构建编辑器。
在 Slate 中, 插件是一等公民 ,连编辑器都是以插件的形式创建的,其中编辑器对象扮演着主体容器/应用的角色,提供核心功能, 每个插件可以基于 Editor 提供的核心能力去拦截改写或扩展自己的功能/逻辑 。
插件生命周期
这一节,我也不知道要讲些什么,或者说都在下面的两张图里,大家看图吧。
注册插件流程
结语
该篇同步至github,最近在更编辑器相关知识的系列专栏,如果你也感兴趣,可以关注我,平常可以聊聊,最后,觉得文章还可以,点赞是对我最大的支持🌹