CKEditor5 从源码集成到Vite项目的完整指南

CKEditor5 从源码集成到Vite项目的完整指南

ckeditor5 具有模块化架构、现代集成和协作编辑等功能的强大富文本编辑器框架 ckeditor5 项目地址: https://gitcode.com/gh_mirrors/ck/ckeditor5

前言

本文将详细介绍如何在Vite项目中从源码集成CKEditor5富文本编辑器。与直接使用预构建版本不同,这种方法让你能够完全控制编辑器的构建过程,可以自由选择需要的功能模块并进行深度定制。

为什么选择从源码集成

从源码集成CKEditor5相比使用预构建版本有几个显著优势:

  1. 完全控制:可以精确选择需要的功能模块
  2. 灵活配置:能够自定义工具栏布局和编辑器行为
  3. 优化体积:只包含实际需要的功能,减少最终打包体积
  4. 深度定制:便于进行主题和样式的深度修改

环境准备

系统要求

  • Node.js 18+或20+版本
  • npm 7+版本(建议使用最新稳定版)
  • Vite 4+版本

初始化Vite项目

首先创建一个基础的Vite项目:

npm create vite@latest ckeditor5-vite-example -- --template vanilla

如果需要使用TypeScript:

npm create vite@latest ckeditor5-vite-example -- --template vanilla-ts

安装CKEditor5核心包

基础编辑器包

首先安装编辑器核心包和默认主题:

npm install --save @ckeditor/ckeditor5-editor-classic @ckeditor/ckeditor5-theme-lark

功能插件包

根据需求安装所需的功能插件,例如:

npm install --save \
  @ckeditor/ckeditor5-essentials \
  @ckeditor/ckeditor5-autoformat \
  @ckeditor/ckeditor5-basic-styles \
  @ckeditor/ckeditor5-block-quote \
  @ckeditor/ckeditor5-heading \
  @ckeditor/ckeditor5-link \
  @ckeditor/ckeditor5-list \
  @ckeditor/ckeditor5-paragraph

Vite配置

安装Vite插件

CKEditor5提供了专门的Vite插件来处理样式和图标资源:

npm install --save @ckeditor/vite-plugin-ckeditor5

配置vite.config.js

在项目根目录创建或修改vite.config.js文件:

import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);

import { defineConfig } from 'vite';
import ckeditor5 from '@ckeditor/vite-plugin-ckeditor5';

export default defineConfig({
  plugins: [
    ckeditor5({ theme: require.resolve('@ckeditor/ckeditor5-theme-lark') })
  ]
});

编辑器配置与使用

方法一:创建编辑器子类

这种方法适合需要复用编辑器配置的场景。

JavaScript版本

创建src/ckeditor.js文件:

import { ClassicEditor as ClassicEditorBase } from '@ckeditor/ckeditor5-editor-classic';
import { Essentials } from '@ckeditor/ckeditor5-essentials';
// 导入其他需要的插件...

export default class ClassicEditor extends ClassicEditorBase {}

ClassicEditor.builtinPlugins = [
  Essentials,
  // 添加其他插件...
];

ClassicEditor.defaultConfig = {
  toolbar: {
    items: [
      'heading', '|',
      'bold', 'italic', 'link',
      'bulletedList', 'numberedList',
      'blockQuote', 'undo', 'redo'
    ]
  },
  language: 'en'
};

main.js中使用:

import ClassicEditor from './src/ckeditor';

ClassicEditor
  .create(document.querySelector('#app'))
  .then(editor => {
    console.log('编辑器初始化完成', editor);
  })
  .catch(error => {
    console.error(error.stack);
  });
TypeScript版本

创建src/ckeditor.ts文件:

import { ClassicEditor as ClassicEditorBase } from '@ckeditor/ckeditor5-editor-classic';
import { Essentials } from '@ckeditor/ckeditor5-essentials';
// 导入其他需要的插件...

export default class ClassicEditor extends ClassicEditorBase {}

ClassicEditor.builtinPlugins = [
  Essentials,
  // 添加其他插件...
];

ClassicEditor.defaultConfig = {
  toolbar: {
    items: [
      'heading', '|',
      'bold', 'italic', 'link',
      'bulletedList', 'numberedList',
      'blockQuote', 'undo', 'redo'
    ]
  },
  language: 'en'
};

main.ts中使用:

import ClassicEditor from './src/ckeditor';

ClassicEditor
  .create(document.querySelector('#app') as HTMLElement)
  .then(editor => {
    console.log('编辑器初始化完成', editor);
  })
  .catch(error => {
    console.error(error.stack);
  });

方法二:直接使用编辑器类

这种方法适合一次性使用的简单场景。

JavaScript版本
import { ClassicEditor } from '@ckeditor/ckeditor5-editor-classic';
import { Essentials } from '@ckeditor/ckeditor5-essentials';
// 导入其他需要的插件...

ClassicEditor
  .create(document.querySelector('#app'), {
    plugins: [
      Essentials,
      // 添加其他插件...
    ],
    toolbar: [
      'heading', 'bold', 'italic', 'link',
      'bulletedList', 'numberedList',
      'blockQuote', 'undo', 'redo'
    ]
  })
  .then(editor => {
    console.log(editor);
  })
  .catch(error => {
    console.error(error);
  });
TypeScript版本
import { ClassicEditor } from '@ckeditor/ckeditor5-editor-classic';
import { Essentials } from '@ckeditor/ckeditor5-essentials';
// 导入其他需要的插件...

ClassicEditor
  .create(document.querySelector('#app') as HTMLElement, {
    plugins: [
      Essentials,
      // 添加其他插件...
    ],
    toolbar: [
      'heading', 'bold', 'italic', 'link',
      'bulletedList', 'numberedList',
      'blockQuote', 'undo', 'redo'
    ]
  })
  .then(editor => {
    console.log(editor);
  })
  .catch(error => {
    console.error(error);
  });

项目构建与运行

完成上述配置后,可以运行以下命令启动开发服务器:

npm run dev

构建生产版本:

npm run build

常见问题与解决方案

  1. 图标不显示:确保正确配置了Vite插件并安装了主题包
  2. 样式问题:检查是否正确导入了主题样式
  3. 插件冲突:确保所有插件版本一致
  4. TypeScript类型错误:确保安装了对应的@types包(如果有)

最佳实践建议

  1. 模块化配置:将编辑器配置单独放在一个文件中便于维护
  2. 按需加载:只安装实际需要的功能插件
  3. 版本管理:保持所有CKEditor5相关包的版本一致
  4. 错误处理:妥善处理编辑器初始化可能出现的错误

总结

通过本文介绍的方法,你可以在Vite项目中灵活地集成CKEditor5编辑器,完全控制其功能和配置。相比使用预构建版本,这种方法虽然配置稍复杂,但提供了更大的灵活性和定制空间,适合对编辑器有特殊需求的项目。

ckeditor5 具有模块化架构、现代集成和协作编辑等功能的强大富文本编辑器框架 ckeditor5 项目地址: https://gitcode.com/gh_mirrors/ck/ckeditor5

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

史恋姬Quimby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值