ck-editor5的研究 (1):快速把 CKEditor5 集成到 nuxt 中

article/2025/7/20 1:05:50

前言

最近有用到 CKEditor5, 有点头大,只能在业余时间研究一下了。一看他们的文档,结果发现有点难以理解(我阅读理解一直很差),看了许久,还是对他们的设计概念有点云里雾里的。为了不浪费时间,我决定自己一步一步探索一下这个编辑器。

注:我用的 CKEditor 版本是 37.1.0

要实现的效果是:
在这里插入图片描述

1. 观察文档

首先找到他们的文档首页进行观察。
https://ckeditor.com/docs/ckeditor5/latest/index.html
在这里插入图片描述

分别点击上面的几个菜单浏览一下,我们可以得到以下几个信息:

  1. Getting started。这通常是我们快速上手一个包的地方,一会我也将会从这里开始研究。
  2. Features。这大概是CKEditor给我们展示自己能力的地方,可以看到有付费功能和免费功能,很齐全。
  3. Examples。估计这是手把手带我们实现一些功能的教程。
  4. Framework。这应该是CKEditor介绍他们底层架构的地方,估计以后深入研究CKEditor会来到这里找资料。
  5. API。这应该是CKEditor全部的接口,有点像Vue、mdn 这些列举对象属性和方法的地方,可能会在后续调用某些方法的时候来这里查找
  6. 后续的则是更新、赞助、github源码的地方,暂时跟我们关系不大。

2. 寻找 CKEditor5 和 vite 或 nuxt 的联系

进入 Getting started,找了一圈发现这里才是我想要的 (旧版)使用 Vite 从源集成 因为 Getting started 快速开始 是介绍最新版的CKEditor5,也就是42+版本,但我使用的是 37.1.0 版本,所以我要用旧版集成。此外,我要集成到 nuxt 中,而 nuxt 又是用 vite 解决工程化体系的,所以我将会选择从 vite 集成 CKEditor5。
在这里插入图片描述

3. 用最少的成本集成到 nuxt

nuxt 项目我已经有了,版本用的是3.16.2,我直接按照文档进行集成。

1. 第一步:安装依赖

按照教程,使用经典编辑器进行集成(既然这里特意提到经典编辑器,就说明有很多种编辑器,比如内联编辑器、悬浮框编辑器等等,暂且不管)
在这里插入图片描述

我用的pnpm管理,因此我的安装如下:

pnpm add @ckeditor/ckeditor5-theme-lark@37.1.0
pnpm add @ckeditor/ckeditor5-autoformat@37.1.0
pnpm add @ckeditor/ckeditor5-basic-styles@37.1.0
pnpm add @ckeditor/ckeditor5-block-quote@37.1.0
pnpm add @ckeditor/ckeditor5-editor-classic@37.1.0
pnpm add @ckeditor/ckeditor5-essentials@37.1.0
pnpm add @ckeditor/ckeditor5-heading@37.1.0
pnpm add @ckeditor/ckeditor5-link@37.1.0
pnpm add @ckeditor/ckeditor5-list@37.1.0
pnpm add @ckeditor/ckeditor5-paragraph@37.1.0

2. 第二步:配置vite(也就是nuxt.config.ts)

继续跟着他们的文档,发现还需要一个vite插件:
在这里插入图片描述

再安装一下,既然是vite插件,那么可以安装到开发依赖:

pnpm add @ckeditor/vite-plugin-ckeditor5 -D

再配置一下 nuxt.config.ts,这是一些关键配置:

import { defineNuxtConfig } from 'nuxt/config';
import ckeditor5 from '@ckeditor/vite-plugin-ckeditor5';
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
export default defineNuxtConfig({vite: {plugins: [ckeditor5({ theme: require.resolve('@ckeditor/ckeditor5-theme-lark') })],},
});

3. 第三步:编写editor组件

在 components 目录下新建ck目录,一个是 .ts, 一个是 .vue。
在这里插入图片描述

ckeditor1.ts 代码如下:

import { ClassicEditor } from '@ckeditor/ckeditor5-editor-classic'; // 基础类,用于创建实例
import { Essentials } from '@ckeditor/ckeditor5-essentials'; // ckeditor5基本功能(基本功能,没有就无法正常键入)
import { Autoformat } from '@ckeditor/ckeditor5-autoformat'; // 自动格式化功能
import { Bold, Italic } from '@ckeditor/ckeditor5-basic-styles'; // 提供基本样式(斜体、粗体)
import { BlockQuote } from '@ckeditor/ckeditor5-block-quote'; // 提供引用功能
import { Heading } from '@ckeditor/ckeditor5-heading'; // 提供标题功能
import { Link } from '@ckeditor/ckeditor5-link'; // 提供链接功能
import { List } from '@ckeditor/ckeditor5-list'; // 提供列表功能
import { Paragraph } from '@ckeditor/ckeditor5-paragraph'; // 提供段落功能(也算基本功能,没有就无法正常键入)// 这里我创建了一个自己的类,继承了基础类。
export default class MyClassicEditor extends ClassicEditor {// 注册这些插件static override builtinPlugins = [Essentials, Autoformat, Bold, Italic, BlockQuote, Heading, Link, List, Paragraph];static override defaultConfig = {// 配置工具栏toolbar: {items: ['heading', '|', 'bold', 'italic', 'link', 'bulletedList', 'numberedList', 'blockQuote', 'undo', 'redo'],},// 配置语言language: 'en',};
}

因为nuxt会自动注册components里面的组件,而CKEditor只能在客户端使用,所以要加.client,确保它是在客户端渲染的,ck-editor1.client.vue 如下:

<template><div id="editor" ref="editorRef"></div>
</template><script setup lang="ts">
import MyClassicEditor from './ckeditor1';const editorRef = useTemplateRef('editorRef');async function initEditor() {try {if (!editorRef.value) {return;}const editor = await MyClassicEditor.create(editorRef.value);console.log('editor :>> ', editor);} catch (error: any) {console.log('error :>> ', error.stack);}
}onMounted(() => {nextTick(() => {initEditor();});
});
</script>

4. 第四步:测试组件

可以在 pages 里面进行测试:
在这里插入图片描述

可以发现,无论是客户端还是服务端,都可以运行无报错:
在这里插入图片描述

到此为止,CKEditor5 已经成功接入到nuxt中了,后续再继续探索…


http://www.hkcw.cn/article/KSNFRtulTU.shtml

相关文章

基于LLM的智能客服系统开发全流程:技术架构、落地挑战与行业实践

基于LLM的智能客服系统开发全流程&#xff1a;技术架构、落地挑战与行业实践 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 基于LLM的智能客服系统开发全流程&#xff1a;技术架构、落地挑战与行业实践摘要引言一…

俄版珍珠港事件?有人呼吁报复,“要比当年美国更甚” 乌无人机袭击引发紧张局势升级

就在俄乌定于6月2日举行第二轮直接谈判前夕,俄罗斯境内发生了一系列袭击事件。6月1日,俄罗斯境内五个空军基地遭遇大规模无人机袭击,乌克兰安全局宣称对此负责。这是乌军自俄乌冲突爆发以来对俄领土发动的最具渗透性的袭击之一。俄罗斯国防部认定这是一次“恐怖袭击”,并证…

东盟在中美之间是否已经选边站 东盟明确反对选边站队

2025年6月1日,新加坡香格里拉酒店内气氛紧张。第22届香格里拉对话会进入尾声,但中美之间的博弈仍在亚太地区持续发酵。前一天,美国国防部长赫格塞斯发表演讲,将这场国际安全论坛变成了中美战略交锋的战场。赫格塞斯在30分钟的演讲中,用超过三分之二的时间渲染“中国威胁”…

红色精灵闪电与普通闪电有何不同 高空舞者的秘密

董书畅在西藏山南按下快门的瞬间,捕捉到了一个转瞬即逝的红色精灵闪电,这组照片让网友们赞叹不已,也揭开了大气奇观——红色精灵闪电的神秘面纱。与常见的云地闪电不同,红色精灵闪电出现在30-90公里的高空。这种闪电的形成原理非常神奇,当强烈的云地闪电产生电磁脉冲时,会…

1-2 Dart SDK 安装

要使用 Dart 编程语言开发各种有趣的项目&#xff0c;我们首先需要安装 Dart SDK。Dart SDK 是预编译版本&#xff0c;无需手动编译&#xff0c;只需下载并解压即可使用。 本文将带你一步步完成 Dart SDK 在 Windows、Linux 和 macOS 平台上的安装过程。 &#x1f4bb; 在 Wi…

曝印度航空正洽谈新增大型窄体客机 订单规模或达数百架

塔塔集团旗下的印度航空正与空客和波音就一项重大新飞机订单展开谈判,计划新增约200架单通道客机,以补充2023年的一笔巨额交易。这家前印度国有航空公司正推进数十亿美元的重组计划。消息人士透露,订单谈判可能涉及总计数百架不同机型的飞机,这是对此前报道的“追加一批大型…

张文宏受聘香港理工大学 荣誉教授新身份

5月28日,张文宏在香港理工大学的名师讲堂进行演讲。当天,香港理工大学聘请他为医疗科技及资讯学系的荣誉教授,由该校常务及学务副校长黄永德教授颁发聘书。张文宏是国际公认的传染病防控权威专家,长期致力于感染性疾病的临床诊疗及公共卫生防疫,现任复旦大学附属华山医院感…

山西小伙脖子被扎多根烧烤签 已脱离危险

6月2日凌晨2时许,有网友发帖称山西临汾一名小伙脖子上被扎了多根烧烤签。据网友发布的视频显示,这名小伙脖子上扎了四根金属签子,签上还有烧烤肉串。急救人员小心翼翼地将其带至病床。受伤小伙暂已脱离危险。发帖网友是一名参与此次急救的急救人员。他介绍,事发于凌晨零时前…

戚薇一家四口泰国被偶遇 幸福出游羡煞旁人

6月1日,有网友在泰国偶遇戚薇一家四口,看起来他们是为了庆祝端午节和儿童节而前往泰国。被发现时,戚薇戴着一顶黑色鸭舌帽,搭配墨镜,头发扎成低丸子头,正和女儿Lucky在商场玩具区选购玩具。从网友晒出的照片来看,戚薇和李承铉都穿着黑色服装,显得十分干练。40岁的戚薇戴…

苏超爆火 “散装江苏”藏都不藏了 城市荣誉大比拼

近日,一场看似普通的足球比赛让江苏的“散装”属性显露无遗。江苏以其内部竞争激烈著称,地级市之间甚至县区之间都暗自较劲,主打不服输的精神。苏超联赛的诞生将这种竞争搬到了明面上,各城市的花式宣传十分有趣。在第二轮比赛后,常州队以-4分垫底,接连失利被调侃为从常州…

灭鼠药商跨界造车?金鱼汽车啥来头 新势力亮相郑州车展

近日,2025年第十三届郑州新能源汽车与光储充展览会在郑州国际会展中心开幕,展期三天,于5月29日结束。尽管是地区性展会,但吸引了国内众多车企参与。新品牌金鱼汽车的出现引起了广泛关注。这个名字颇具乡野气息,命名策略大胆且激进。在新能源汽车行业竞争激烈的背景下,这家…

AGI大模型(35):Advanced RAG之Pre-Retrieval(预检索)优化——查询优化

1 Enrich完善问题 理想情况:通过大模型多次主动与用户沟通,不断收集信息,完善对用户真实意图的理解,补全执行用户需求所需的各项参数。 2 Multi-Query 多路召回

FreeRTOS任务之使用篇

目录 1.区分1.1 相似之处&#xff1a;1.2 区别 2.任务的创建和删除2.1 任务创建2.1.1 动态创建pxTaskCode (任务函数指针)pcName (任务名称)usStackDepth (栈深度)pvParameters (任务参数)uxPriority (任务优先级)pxCreatedTask (任务句柄) 2.1.2 静态创建2.1.3 最后一个参数2.…

K3s简介、实战、问题记录

概述 K3s由Rancher Labs开发&#xff0c;是一个开源的&#xff0c;轻量级的Kubernetes&#xff08;下文简称k8s&#xff09;发行版&#xff0c;专为边缘计算、IoT和资源受限环境设计&#xff1b;保留k8s核心功能&#xff0c;并去掉部分非必要组件。 官网&#xff0c;中文文档…

【Unity博客节选】Timeline 内部结构 IntervalTree 分析

注&#xff1a;软件版本Unity 6.0 Timeline 1.8.7 作者&#xff1a;CSDN RingleaderWang 原文&#xff1a;《Unity第25期——Timeline结构及其源码浅析》 文章首发Github&#x1f44d;&#xff1a;《Timeline结构及其源码浅析》 Bilibili 视频版&#x1f44d;&#x1f44d;&a…

太原一路虎车横冲直撞 路人纷纷避让 危险驾驶引热议

今天刷手机时看到一段让人揪心的视频。6月2日凌晨,太原南中环花海酒吧门口,一辆路虎越野车失控冲撞。车辆先是猛烈撞击酒吧大门,停顿片刻后又朝人群冲去,吓得周围人四处躲避。有个穿黑衣服的小伙子试图上前拉开车门,结果被晃得一个趔趄。据现场网友说,事发时间大约是凌晨…

吃不起的玉米蛋挞到底谁在买 轻奢甜品引争议

“我亲手种的苞谷,终究成了我吃不起的玉米蛋挞。”这几天,许多短视频展示了从玉米地到高价烘焙品玉米蛋挞的转场画面,台词表达了消费者对高价烘焙品的不满。一块名为玉米蛋挞的网红甜品引发了广泛关注。在产地,一斤玉米的收购价大约在一元上下,但在烘焙店里,一枚玉米蛋挞…

泡泡玛特市值首超三丽鸥 登顶亚洲角色经济榜首

2025年6月2日,中国潮玩巨头泡泡玛特迎来重要时刻。截至当日收盘,公司总市值突破2500亿港元,首次超越日本IP巨头三丽鸥,登顶亚洲角色经济市值榜首。这一成就主要归功于泡泡玛特以自有IP Labubu为核心的全球爆火以及海外市场同比超475%的爆发式增长。公司计划年内将海外门店数…

哈佛演讲的中国女生否认走后门入学 回应争议自述经历

哈佛大学毕业典礼上,中国学生蒋雨融的演讲引起了广泛关注。6月2日凌晨,一个名为“哈佛蒋雨融Luanna”的账号发文回应了争议。她提到自己从小父母离婚分居,跟随母亲四处搬家转学。在初中时曾遭受霸凌,只能通过阅读书籍来寻找安慰和答案。在美国求学期间,她的推荐信分别来自…

PostgreSQL 性能问题诊断:锁等待、索引失效与查询计划分析

在高并发、大数据量的 PostgreSQL 应用场景中,锁等待、索引失效与查询计划异常是导致性能下降的三大核心问题。 本文将系统解析如何通过 pg_locks、pg_stat_activity 和 EXPLAIN ANALYZE 等工具快速诊断问题,并结合实战案例与代码示例,帮助开发者构建完整的性能调优知识体系…