Vue3 富文本编辑器实战指南:选型与深度使用
引言
富文本编辑器是内容管理系统(CMS)、博客平台、在线协作工具等场景的核心组件。在 Vue3 生态中,选择一款合适的富文本编辑器对项目开发效率有着重要影响。本文基于多个实战项目的经验总结,系统介绍 Vue3 环境下主流富文本编辑器的特点、选型建议及集成方法,帮助开发者快速定位适合自己项目的解决方案。
一、富文本编辑器基础认知
1.1 编辑器技术演进
第一代:TextArea 时代 第二代:ContentEditable 时代 第三代:Framework 时代
1.2 技术分类对比
| 类型 | 代表产品 | 特点 | 适用场景 |
|---|---|---|---|
| 传统富文本编辑器 | TinyMCE、CKEditor | 功能全面,开箱即用 | 企业级应用 |
| 框架型编辑器 | Tiptap、ProseMirror | 高度可定制,API 丰富 | 定制化需求 |
| 轻量级编辑器 | VueQuill、wangEditor | 体积小,易集成 | 中小型项目 |
| 协作编辑 | SugarCE、Liveblocks | 实时多人编辑 | 在线协作 |
二、主流编辑器深度解析
2.1 TinyMCE Vue(建议首选)
GitHub: github.com/tinymce/tin… | Stars: ⭐ 16.2k
TinyMCE 是老牌全功能富文本编辑器,Vue3 适配版成熟稳定,是中大型项目和企业级场景的首选。
核心特点
- 功能全覆盖:富文本编辑、表格、图片/视频上传、代码块、拼写检查、批注等企业级功能
- 完善的 Vue3 组件封装,支持 Vite 和 TypeScript
- 可高度自定义工具栏、皮肤、快捷键
- 多语言支持,内置 i18n 国际化方案
- 免费版有功能限制,商业版需授权(开源项目可申请免费授权)
快速安装
npm install @tinymce/tinymce-vue@^5 tinymce
基础使用
<template>
<div class="editor-container">
<Editor
v-model="content"
:init="{
height: 500,
menubar: false,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image',
'charmap', 'preview', 'searchreplace', 'visualblocks',
'code', 'fullscreen', 'insertdatetime', 'table', 'wordcount'
],
toolbar:
'undo redo | blocks | ' +
'bold italic forecolor | alignleft aligncenter ' +
'alignright alignjustify | bullist numlist outdent indent | ' +
'removeformat | code | image | table',
branding: false,
language: 'zh_CN'
}"
/>
</div>
</template>
<script setup>
import { ref } from 'vue'
import Editor from '@tinymce/tinymce-vue'
const content = ref('')
</script>
进阶配置:自定义图片上传
const initConfig = {
images_upload_handler: async (blobInfo, success, failure) => {
const formData = new FormData()
formData.append('file', blobInfo.blob(), blobInfo.filename())
try {
const response = await fetch('/api/upload', {
method: 'POST',
body: formData
})
const result = await response.json()
success(result.url)
} catch (error) {
failure('图片上传失败')
}
}
}
2.2 Tiptap(最值得关注)
GitHub: github.com/ueberdosis/… | Stars: ⭐ 36.3k
Tiptap 是基于 ProseMirror 的无头富文本编辑器框架,以其模块化架构和强大的扩展性著称,是当前最活跃的编辑器框架之一。
核心特点
- Headless 架构:不绑定任何 UI,可完全自定义编辑体验
- 基于 ProseMirror:继承 ProseMirror 的稳定架构和丰富 API
- Vue3 原生支持:提供 @tiptap/vue-3 官方包
- 扩展丰富:内置大量官方扩展,支持自定义扩展开发
- 实时协作友好:基于 Y.js 的协作编辑方案成熟
安装使用
npm install @tiptap/vue-3 @tiptap/starter-kit @tiptap/extension-image @tiptap/extension-table
<template>
<div class="editor-wrapper">
<MenuBar v-if="editor" :editor="editor" />
<EditorContent :editor="editor" class="editor-content" />
</div>
</template>
<script setup>
import { useEditor, EditorContent, MenuBar } from '@tiptap/vue-3'
import StarterKit from '@tiptap/starter-kit'
import Image from '@tiptap/extension-image'
import Table from '@tiptap/extension-table'
import TableRow from '@tiptap/extension-table-row'
import TableCell from '@tiptap/extension-table-cell'
import TableHeader from '@tiptap/extension-table-header'
const editor = useEditor({
extensions: [
StarterKit,
Image.configure({ inline: true }),
Table.configure({ resizable: true }),
TableRow,
TableCell,
TableHeader,
],
content: '<p>开始编辑...</p>',
})
onBeforeUnmount(() => editor.value?.destroy())
</script>
<style>
.editor-content {
border: 1px solid #d1d5db;
border-radius: 8px;
padding: 16px;
min-height: 400px;
}
.editor-content .ProseMirror {
outline: none;
min-height: 380px;
}
</style>
Tiptap UI Kit(推荐模板)
GitHub: github.com/benngaihk/T… | Stars: 持续更新
一个生产级 Tiptap Vue 3 模板,提供 5 种主题(Notion、Word、GitHub)、AI 写作辅助、实时协作等功能,开箱即用。
git clone https://github.com/benngaihk/Tiptap-UI-Kit.git
cd Tiptap-UI-Kit
npm install
npm run dev
2.3 wangEditor(国内首选)
GitHub: github.com/wangeditor-… | Stars: ⭐ 18.3k
wangEditor 是国产开源富文本编辑器的中坚力量,提供开箱即用、配置简单的使用体验,文档完善,中文社区活跃。
核心特点
- 轻量级:体积小,加载迅速
- 中文文档完善:官方文档配有完整中文指南
- 适配国内场景:内置图片上传、视频上传等常用功能
- 支持 Vue、React、jQuery:框架无关设计
- 持续维护:社区活跃,版本迭代稳定
Vue3 集成
npm install @wangeditor/editor @wangeditor/editor-for-vue
<template>
<div class="editor-container">
<div style="border-bottom: 1px solid #ccc; margin-bottom: 10px;">
<Toolbar
:editor="editorRef"
:defaultConfig="toolbarConfig"
:mode="mode"
/>
</div>
<Editor
v-model="valueHtml"
:defaultConfig="editorConfig"
:mode="mode"
@onChange="handleChange"
@onCreated="handleCreated"
/>
</div>
</template>
<script setup>
import { ref, shallowRef, onBeforeUnmount } from 'vue'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
const editorRef = shallowRef()
const valueHtml = ref('<p>Hello World!</p>')
const mode = ref('default')
const toolbarConfig = {}
const editorConfig = {
placeholder: '请输入内容...',
MENU_CONF: {
uploadImage: {
server: '/api/upload',
fieldName: 'file',
}
}
}
const handleCreated = (editor) => {
editorRef.value = editor
}
const handleChange = (editor) => {
console.log('content:', editor.getHtml())
}
onBeforeUnmount(() => {
editorRef.value?.destroy()
})
</script>
<style>
@import '@wangeditor/editor/dist/css/style.css';
</style>
2.4 VueQuill(轻量之选)
GitHub: github.com/vueup/vue-q… | Stars: ⭐ 1.3k
VueQuill 是 Quill 编辑器的 Vue 3 封装,保持了 Quill 的轻量特性,适合对编辑器要求不高的中小型项目。
核心特点
- 基于 Quill:继承 Quill 的稳定性和丰富功能
- Vue 3 原生组件:完整的 TypeScript 支持
- 体积小:适合轻量级需求
- 主题丰富:可自定义工具栏样式
安装使用
npm install @vueup/vue-quill
<template>
<div class="quill-editor">
<QuillEditor
v-model:content="content"
contentType="html"
theme="snow"
toolbar="full"
:toolbar-options="{
header: [1, 2, false],
list: 'ordered',
bullet: 'ordered',
bold: true,
italic: true,
underline: true,
strike: true,
'code-block': true,
link: true,
image: true,
}"
/>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css'
const content = ref('<p>Hello Quill!</p>')
</script>
2.5 CKEditor 5(高定制需求)
GitHub: github.com/ckeditor/ck… | Stars: ⭐ 10.4k
CKEditor 5 是模块化设计的富文本编辑框架,提供完全开源的构建版本,适合对编辑功能有个性化需求的开发者。
核心特点
- 完全开源:无功能限制,可商用
- 模块化架构:按需引入,体积可控
- 高度可定制:支持自定义插件开发
- 协作编辑:内置 Real-time collaboration 扩展
- 多语言:内置 50+ 种语言包
Vue3 集成
npm install @ckeditor/ckeditor5-vue @ckeditor/ckeditor5-build-classic
<template>
<div class="ckeditor-wrapper">
<ckeditor :editor="editor" v-model="content" :config="editorConfig" />
</div>
</template>
<script setup>
import { ref } from 'vue'
import ClassicEditor from '@ckeditor/ckeditor5-build-classic'
import CKEditor from '@ckeditor/ckeditor5-vue'
const content = ref('')
const editor = ClassicEditor
const editorConfig = {
language: 'zh-cn',
toolbar: [
'heading', '|', 'bold', 'italic', 'link', 'bulletedList',
'numberedList', '|', 'insertTable', '|', 'undo', 'redo'
],
table: {
contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells']
}
}
</script>
2.6 Milkdown(Markdown友好)
Milkdown 是另一个基于 ProseMirror 的无头编辑器,以其对 Markdown 的原生支持和极简设计著称。
GitHub: github.com/SNKK65/milk… | Stars: 活跃维护
核心特点
- Markdown First:原生支持 Markdown 语法
- 插件化架构:核心精简,扩展能力强
- Vue3 支持:提供官方 Vue 集成包
- SSR 兼容:支持服务端渲染
三、编辑器选型指南
选型决策矩阵
| 需求场景 | 推荐选择 | 理由 |
|---|---|---|
| 企业级 / 全功能需求 | TinyMCE | 功能最全,生态成熟,商业支持完善 |
| 轻量 / 中小型项目 | VueQuill / wangEditor | 体积小、易集成、中文友好 |
| 开源项目 / 无授权限制 | CKEditor 5 | 完全开源,定制性强 |
| 国内场景 / 快速接入 | wangEditor | 中文文档,适配国内上传场景 |
| 高定制化 / 协作编辑 | Tiptap | 模块化架构,扩展性强,36k+ stars 社区活跃 |
| Markdown 优先 | Milkdown | 原生 Markdown 支持 |
项目规模选型建议
小型项目(< 3个月周期) 推荐选择 wangEditor 或 VueQuill,开箱即用,学习成本低,能够快速完成集成。
中型项目(3-6个月周期) 推荐选择 Tiptap,虽然学习曲线较陡,但扩展性强,能够应对需求变化。
大型/企业项目(> 6个月周期) 推荐选择 TinyMCE,企业级支持完善,功能稳定,适合长期维护。
协作编辑场景 推荐选择 Tiptap + Y.js 方案,或 CKEditor 5 的协作套件。
四、实战注意事项
4.1 图片与文件上传
所有编辑器都支持自定义上传逻辑,建议统一封装上传接口:
// 统一上传封装
export const uploadFile = async (file, config = {}) => {
const formData = new FormData()
formData.append(config.fieldName || 'file', file)
const response = await fetch(config.server || '/api/upload', {
method: 'POST',
body: formData,
headers: config.headers || {}
})
if (!response.ok) throw new Error('Upload failed')
return response.json()
}
注意事项:
- 避免直接使用默认的 base64 存储,体积过大会影响性能
- 生产环境建议使用 OSS/COS 等对象存储服务
- 添加上传进度回调,提升用户体验
4.2 内存泄漏防范
在 Vue3 中,组件卸载时必须销毁编辑器实例:
import { onBeforeUnmount } from 'vue'
// 方案一:使用 onBeforeUnmount
onBeforeUnmount(() => {
editor.value?.destroy()
})
// 方案二:使用 v-if 条件渲染
// <Editor v-if="showEditor" />
4.3 样式适配
- 部分编辑器需手动引入样式文件(如 wangEditor 需要导入 CSS)
- 注意与项目主题的兼容性,特别是深色模式支持
- 使用 CSS 变量统一主题配置
4.4 性能优化
- 懒加载编辑器组件:大型内容编辑场景可考虑按需加载
- SSR 注意事项:确保编辑器组件在客户端 hydrate 后再渲染
- 内容序列化:大型内容建议使用增量保存策略
五、总结
Vue3 生态下的富文本编辑器选择丰富,不同编辑器适配不同场景:
- TinyMCE 适合企业级全功能需求
- Tiptap 以 36.3k stars 成为最活跃的框架型编辑器,适合高定制化场景
- wangEditor 18.3k stars 的国产之光,中文友好
- VueQuill 轻量级选择,集成简单
- CKEditor 5 完全开源,商用无忧
- Milkdown Markdown 爱好者的首选