wangEditor 5 编辑器包(@wangeditor/editor)实战指南:开箱即用的 Web 富文本编辑器
wangEditor 5 编辑器包wangeditor/editor实战指南开箱即用的 Web 富文本编辑器【免费下载链接】wangEditorwangEditor, open-source Web rich text editor 开源 Web 富文本编辑器项目地址: https://gitcode.com/gh_mirrors/wa/wangEditor导读本文以 wangEditor 仓库中 packages/editor 包npm 名wangeditor/editor为核心讲解这个开箱即用、配置简单的 Web 富文本编辑器在 JS / Vue / React 项目中的接入方式、createEditor/createToolbar核心 API、Boot全局注册机制以及内置模块、默认配置、多语言、示例与测试的组织方式。读完本文你将掌握如何在任意前端技术栈中快速创建带工具栏的编辑器、如何切换默认/简洁两种模式、如何通过全局配置定制菜单与行为以及如何在源码层面深入二次开发。一、包定位从源码包到开箱即用的编辑器在 wangEditor 的 monorepolerna 管理结构中packages/editor是面向最终使用者的聚合入口包。它不重复实现编辑器内核而是把底层能力组装成开箱即用的完整产品。它的名字和产物如下见 packages/editor/package.json包名wangeditor/editor当前版本5.1.23描述Web rich text editor, Web 富文本编辑器入口main: dist/index.jsCommonJS、module: dist/index.esm.jsES Module类型声明dist/editor/src/index.d.ts依赖wangeditor/core内核、wangeditor/basic-modules基础模块、wangeditor/list-module、wangeditor/table-module、wangeditor/video-module、wangeditor/upload-image-module、wangeditor/code-highlight等全部功能模块以及slate、snabbdom、dom7等底层库许可证MIT官方定位的一句话在 packages/editor/README.md 中写得很明确开源 Web 富文本编辑器开箱即用配置简单支持 JS / Vue / React。也就是说无论你用的是原生 JS、Vue 2/3 还是 React安装这一个包即可获得完整编辑能力无需手动组装各个模块。从 packages/editor/src/index.ts 的入口代码可以看到它做了四件关键的事引入样式自身assets/index.less与内核wangeditor/core/dist/css/style.css执行浏览器/Node 环境的 polyfill./utils/browser-polyfill、./utils/node-polyfill保证兼容性加载多语言资源、注册内置模块、初始化默认配置导出Boot、core API、slate API 以及createEditor/createToolbar工厂函数。正是这种入口即装配的设计让使用者只需几行代码就能跑起来。二、快速上手两个核心 API 完成编辑器搭建wangeditor/editor对外暴露的创建入口是createEditor与createToolbar见 packages/editor/src/create.ts仓库内置示例 packages/editor/examples/default-mode.html 展示了完整用法。最小步骤如下div ideditor-toolbar classeditor-toolbar/div div ideditor-text-area classeditor-text-area/div script src.../dist/index.js/script script const E window.wangEditor const editorConfig { placeholder: 请输入内容, MENU_CONF: {}, onChange: (editor) { // 每次内容变化时触发 console.log(editor.getHtml()) }, } const toolbarConfig {} // 1. 创建编辑器绑定内容区域 const editor E.createEditor({ selector: #editor-text-area, // 也支持传 DOM 元素 config: editorConfig, // content: [...], // slate JSON 内容 // html: phello/p, // 或直接传 html // mode: default, // default | simple }) // 2. 创建工具栏绑定工具栏区域传入 editor 实例 const toolbar E.createToolbar({ editor, selector: #editor-toolbar, config: toolbarConfig, }) /scriptcreateEditor 参数详解ICreateEditorOption源码同文件顶部定义支持以下字段参数类型说明selectorstring \| DOMElement编辑器挂载点支持 CSS 选择器字符串或 DOM 元素缺省为空字符串configPartialIEditorConfig编辑器配置与全局配置浅合并contentDescendant[]slate 数据结构的内容JSON 数组缺省为[]htmlstring可选直接以 HTML 字符串作为初始内容modedefault \| simple模式缺省defaultsimple为简洁模式createToolbar 参数详解ICreateToolbarOption支持参数类型说明editorIDomEditor \| null已创建的编辑器实例必须传入selectorstring \| DOMElement工具栏挂载点必填缺失会抛错Cannot find selector when create toolbarconfigPartialIToolbarConfig工具栏配置modestring模式与编辑器保持一致一个值得注意的实现细节createEditor在合并配置时会单独处理hoverbarKeys选中文字弹出的悬浮工具条配置对全局配置与实例配置做浅合并后再传给内核coreCreateEditor而createToolbar同样会把全局工具栏配置与实例配置合并后传给coreCreateToolbar。这意味着实例配置优先于全局配置后合并者覆盖前者hoverbarKeys采用并集策略实例配置可以增量扩展全局悬浮菜单而不丢失默认项。三、两种模式default 与 simple 的默认配置差异mode参数决定编辑器采用哪套默认配置。在 packages/editor/src/init-default-config/index.ts 中编辑器会分别在Boot上注册四套默认配置default模式getDefaultEditorConfig()含genDefaultHoverbarKeys()悬浮工具条getDefaultToolbarConfig()含genDefaultToolbarKeys()完整工具栏simple模式getSimpleEditorConfig()getSimpleToolbarConfig()。createEditor中通过mode simple ? Boot.simpleEditorConfig : Boot.editorConfig选择对应配置createToolbar同理选择simpleToolbarConfig/toolbarConfig。默认模式的工具栏键序列定义在 packages/editor/src/init-default-config/config/toolbar.ts 的genDefaultToolbarKeys()顺序为标题选择headerSelect、引用blockquote、加粗/下划线/斜体、更多样式分组删除线/行内代码/上标/下标/清除格式、颜色/背景色、字号/字体/行高、无序列表/有序列表/待办、对齐分组、缩进分组、表情/插入链接、图片分组插入/上传、视频分组插入/上传、插入表格、代码块、分割线、撤销/重做、全屏。简洁模式的genSimpleToolbarKeys()则只保留高频能力blockquote、header1/2/3、加粗/下划线/斜体/删除线、颜色/背景色/清除格式、三种列表、三种对齐、插入链接、图片分组、插入视频/表格/代码块、撤销/重做、全屏。工具栏键序列支持两种元素字符串键直接引用已注册菜单的 key如bold、headerSelect、|分隔线分组对象以group开头的key如group-more-style配合title使用t(editor.more)做国际化和iconSvg图标、menuKeys子菜单列表可把多个菜单折叠进一个下拉分组按钮。默认配置文件中大量注释掉的键如header1、editLink、deleteImage、deleteVideo、codeSelectLang等说明这些菜单已注册、只是默认不展示——开发者在自定义toolbarKeys时可以直接启用它们。四、Boot全局注册机制与自定义扩展Boot是 wangEditor 5 的灵魂类实现见 packages/editor/src/Boot.ts它的设计思想是在创建编辑器之前把一切能力配置、插件、菜单、渲染、HTML 转换统一注册到静态容器创建实例时自动携带。构造函数被禁止实例化直接抛错全部成员为静态。全局配置静态成员说明editorConfig/setEditorConfig(config)默认模式编辑器全局配置合并式写入simpleEditorConfig/setSimpleEditorConfig(config)简洁模式编辑器全局配置toolbarConfig/setToolbarConfig(config)默认模式工具栏全局配置simpleToolbarConfig/setSimpleToolbarConfig(config)简洁模式工具栏全局配置能力注册Boot提供了完整的一套registerXxx静态方法分别对接内核的注册机制registerPlugin(plugin)注册 editor 插件slate 插件registerMenu(menuConf, customConfig?)注册菜单registerRenderElem(renderElemConf)注册元素渲染registerRenderStyle(fn)注册文本样式渲染registerElemToHtml(elemToHtmlConf)注册元素转 HTMLregisterStyleToHtml(fn)注册样式转 HTMLregisterPreParseHtml(preParseHtmlConf)注册 HTML 预解析registerParseElemHtml(parseElemHtmlConf)注册 HTML 解析为元素registerParseStyleHtml(fn)注册 HTML 样式解析registerModule(module)一键注册一个完整模块内部会依次调用上面的注册方法见 packages/editor/src/register-builtin-modules/register.ts。一个模块IModuleConf可以包含menus、renderElems、renderStyle、elemsToHtml、styleToHtml、preParseHtml、parseElemsHtml、parseStyleHtml、editorPlugin这些字段registerModule会按字段逐个分发注册——这正是各功能包basic-modules、list-module、table-module 等被wangeditor/editor聚合的方式。例如新增自定义菜单时只需在创建编辑器前const E window.wangEditor E.Boot.registerMenu({ key: myMenu, // 菜单唯一 key可写进 toolbarKeys title: 我的菜单, iconSvg: svg.../svg, // 其他菜单配置... })内置模块自动装配packages/editor/src/register-builtin-modules/index.ts 在包加载时自动完成内置模块注册basic-modules基础模块标题、引用、颜色、字体、对齐、缩进、行高、图片、链接、段落、文本样式、待办、撤销重做、分割线等、list-module列表、table-module表格、video-module视频、upload-image-module图片上传、code-highlight代码高亮同时导入各模块的 CSS。这也是开箱即用的底层保证——你不需要手动注册任何内置能力。五、默认配置初始化hoverbar 与代码高亮packages/editor/src/init-default-config/index.ts 在模块加载时执行默认配置初始化两个关键点hoverbarKeys默认编辑器和简洁编辑器的配置都来自genDefaultHoverbarKeys()/genSimpleHoverbarKeys()见 packages/editor/src/init-default-config/config/index.ts它们定义了选中不同元素时如段落、标题、图片、链接、表格等弹出的悬浮工具条按钮代码高亮默认配置和简洁配置都会附加decorate: wangEditorCodeHighLightDecorate来自wangeditor/code-highlight即开箱即带代码高亮装饰能力。这说明即使不写任何配置编辑器也自带悬浮工具条与代码高亮进一步印证了开箱即用的定位。六、入口导出core API、slate API 与扩展接口wangeditor/editor不仅是一个成品还是二次开发的工具箱。packages/editor/src/index.ts 按需导出了以下内容不可用*全量导出核心 API 与接口DomEditor、IDomEditor、IEditorConfig、IToolbarConfig、Toolbar、IModuleConf、IButtonMenu、ISelectMenu、IDropPanelMenu、IModalMenu多语言i18nChangeLanguage、i18nAddResources、i18nGetResources、tModal 辅助genModalTextareaElems、genModalInputElems、genModalButtonElems自定义弹窗菜单时生成表单元素上传createUploader、IUploadConfig底层基于 Uppyslate API为区分命名空间统一加Slate前缀导出如SlateTransforms、SlateEditor、SlateNode、SlateElement、SlateText、SlatePath、SlateRange、SlatePoint、SlateLocation、SlateDescendant工厂函数createEditor、createToolbarBoot全局注册入口。对于需要深度定制新元素类型、新菜单、自定义粘贴、自定义解析的开发者这些导出就是官方提供的插件 SDK。七、内置示例与测试理解用法的捷径示例目录packages/editor/examples/index.html 是一个示例导航页覆盖了绝大多数使用场景是学习配置的最佳素材default-mode.html默认模式完整示例包含placeholder、MENU_CONF如uploadImage的fieldName、base64LimitSize、onCreated/onChange/onDestroyed/onFocus/onBlur回调、getHtml()/getText()/getSelectionText()/isFocused()等方法、editor.disable()/editor.enable()/editor.destroy()生命周期操作simple-mode.html简洁模式示例parse-html.html使用 HTML 回显menu.html菜单toolbarKeys/excludeKeys配置like-yuque.html仿腾讯文档风格定制maxlength.html最大字数限制upload-image.html / upload-video.html图片、视频上传check.html资源校验、回调与自定义 alertmulti-editors.html单页多个编辑器headers.html获取标题 / 滚动到标题huge-doc.html几万字大文档性能i18n.html国际化theme.html主题定制code-highlight.html代码高亮shadow-dom.htmlShadow DOM 支持batch-destroy.html批量销毁与内存泄漏测试content-to-html.html内容转 HTMLnew-menu.html注册新菜单。以 default-mode.html 为例其中展示了一些容易踩坑的细节btn-toggle-enable按钮需监听mousedown并preventDefault()否则点击会先触发编辑器blur导致无法正确focusonChange里可以实时把editor.getHtml()渲染到其他容器做内容预览。测试与验证packages/editor的自动化测试位于 packages/editor/tests/create.test.ts围绕创建流程做回归验证。此外仓库根目录还有cypress/端到端测试cypress/integration/editor.spec.ts以及各功能模块的 jest 单测如 packages/basic-modules/tests下的菜单、elem-to-html、parse-html、plugin、render-elem测试。运行测试的方式# 在 packages/editor 目录下 yarn test # jest 单测 yarn test-c # jest 覆盖率测试构建与调试packages/editor/package.json 提供了完整脚本yarn dev # 开发模式构建rollup yarn dev-watch # 开发模式监听构建 yarn build # 生产构建 yarn example # 启动示例监听构建 http-server -p 8881 yarn size-stats # 产物体积统计八、扩展阅读在 monorepo 中继续深入packages/editor是整个 wangEditor 产品化的最后一公里向上游深入可以完整理解编辑器架构内核wangeditor/core 提供编辑器/工具栏实例、slate 封装、DOM 绑定、选区同步、渲染管线render、HTML 转换to-html、parse-html、上传upload等底层能力基础模块wangeditor/basic-modules 实现标题、引用、代码块、颜色、分割线、表情、字号字体、全屏、图片、缩进、对齐、行高、链接、段落、文本样式、待办、撤销重做等菜单与解析列表/表格/视频/图片上传/代码高亮wangeditor/list-module、wangeditor/table-module、wangeditor/video-module、wangeditor/upload-image-module、wangeditor/code-highlight开发文档仓库 docs/dev.md 与 docs/README.md 说明了模块开发规范各功能模块的__tests__目录是理解渲染 → 转 HTML → 解析 HTML闭环的最佳范本。结语wangeditor/editor通过入口聚合 Boot 全局注册 默认配置初始化三层设计把 wangEditor 5 的模块化内核包装成了对使用者极其友好的产品安装一个包、调用两个函数、传两行配置即可获得功能完整的富文本编辑器。同时Boot.registerModule等机制又保留了充分的扩展空间——无论是新增菜单、自定义元素还是定制主题与国际化都可以在不修改源码的情况下完成。理解本文梳理的包结构与源码脉络你就同时掌握了会用和能改两种能力。【免费下载链接】wangEditorwangEditor, open-source Web rich text editor 开源 Web 富文本编辑器项目地址: https://gitcode.com/gh_mirrors/wa/wangEditor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Luxon 升级指南:从 1.x / 2.x 迁移到 3.0 的破坏性变更全解析

Luxon 升级指南:从 1.x / 2.x 迁移到 3.0 的破坏性变更全解析

Luxon 升级指南:从 1.x / 2.x 迁移到 3.0 的破坏性变更全解析 【免费下载链接】luxon ⏱ A library for working with dates and times in JS 项目地址: https://gitcode.com/gh_mirrors/lu/luxon Luxon 是专为 JavaScript 设计的日期与时间处理库&#xff0…

2026/9/21 15:28:35 阅读更多 →
基于机器翻译与知识蒸馏训练多语言语义搜索模型:MS MARCO 多语言训练实战指南

基于机器翻译与知识蒸馏训练多语言语义搜索模型:MS MARCO 多语言训练实战指南

人工智能NLPEmbedding微调 【免费下载链接】sentence-transformers State-of-the-Art Embeddings, Retrieval, and Reranking 项目地址: https://gitcode.com/gh_mirrors/se/sentence-transformers 点击查看 免费下载 本指南聚焦 sentence-transformers 仓库中 exa…

2026/9/21 15:28:35 阅读更多 →
DataX 插件开发完全指南:从框架原理、接口实现到打包测试的实战全流程

DataX 插件开发完全指南:从框架原理、接口实现到打包测试的实战全流程

DataX 插件开发完全指南:从框架原理、接口实现到打包测试的实战全流程 【免费下载链接】DataX DataX是阿里云DataWorks数据集成的开源版本。 项目地址: https://gitcode.com/gh_mirrors/da/DataX 本指南面向 DataX 插件开发人员,以阿里云 DataWor…

2026/9/21 15:28:35 阅读更多 →

最新新闻

V8 垃圾回收(Garbage Collection)机制深度剖析:从 Scavenger 到 Mark-Sweep-Compact 的分代回收全景

V8 垃圾回收(Garbage Collection)机制深度剖析:从 Scavenger 到 Mark-Sweep-Compact 的分代回收全景

语言运行时编译器JIT编译解释器内存管理 【免费下载链接】v8 The official mirror of the V8 Git repository 项目地址: https://gitcode.com/gh_mirrors/v81/v8 点击查看 免费下载 V8 是 Google 开发的 JavaScript 引擎,其自动内存管理依赖一套高度复杂…

2026/9/21 16:10:14 阅读更多 →
EMQX 开源仓库贡献指南:分支同步链、Conventional Commit 规范与 Changelog 工程实践

EMQX 开源仓库贡献指南:分支同步链、Conventional Commit 规范与 Changelog 工程实践

EMQX 开源仓库贡献指南:分支同步链、Conventional Commit 规范与 Changelog 工程实践 【免费下载链接】emqx The most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles 项目地址: https://gitcode.com/gh_mirrors/em/emqx 本文以…

2026/9/21 16:10:14 阅读更多 →
flutter_plugin_android_lifecycle 插件深度解析:在 Flutter Android 插件中安全访问 Lifecycle 对象

flutter_plugin_android_lifecycle 插件深度解析:在 Flutter Android 插件中安全访问 Lifecycle 对象

flutter_plugin_android_lifecycle 插件深度解析:在 Flutter Android 插件中安全访问 Lifecycle 对象 【免费下载链接】plugins Plugins for Flutter maintained by the Flutter team 项目地址: https://gitcode.com/gh_mirrors/pl/plugins 本篇文章围绕 Flu…

2026/9/21 16:10:14 阅读更多 →
ccusage 的 OpenCode 数据源适配器:SQLite 主源、JSON 回退与 Token 成本映射全解析

ccusage 的 OpenCode 数据源适配器:SQLite 主源、JSON 回退与 Token 成本映射全解析

ccusage 的 OpenCode 数据源适配器:SQLite 主源、JSON 回退与 Token 成本映射全解析 【免费下载链接】ccusage npx ccusage 项目地址: https://gitcode.com/gh_mirrors/cc/ccusage 本文深入解析 ccusage 项目中 OpenCode 适配器(ccusage-adapter-o…

2026/9/21 16:10:14 阅读更多 →
用 MXNet Gluon 双向 LSTM 训练一个整数序列排序器:从数据编码到训练泛化

用 MXNet Gluon 双向 LSTM 训练一个整数序列排序器:从数据编码到训练泛化

人工智能深度学习机器学习 【免费下载链接】mxnet Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more 项目地址: https://gitcode.c…

2026/9/21 16:10:14 阅读更多 →
SAP ERP业务咨询问卷:系统配置的第一道关键决策点

SAP ERP业务咨询问卷:系统配置的第一道关键决策点

简介:这是一份面向SAP ERP项目实施前期的调研问卷,适用于咨询顾问、项目经理及企业内部关键用户开展业务现状梳理与需求收集。问卷按业务模块组织,涵盖企业基本状况、库存管理、BOM与工艺路线、生产计划、采购、车间生产、产品成本、产品配置…

2026/9/21 16:09:13 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →