Vue CKEditor5 自定义编辑器详细流程(插件安装使用流程)

简介: Vue CKEditor5 自定义编辑器详细流程(插件安装使用流程)

一、简介

  • Vue CKEditor5 快速了解并使用,以及 官方使用插件案例
  • CKEditor5 自定义编辑器的流程:下载官方的源码,然后找到符合要求的基础编辑器包,对它进行修改,安装支持插件等,调整完成之后,对这个编辑器包进行重新打包,就得到了自定义编辑器,可以直接丢入项目或者放到 npm 中去使用。

二、自定义编辑器

  • 下载官方源码,注意:推荐使用 stable 分支。
$ git clone -b stable https://github.com/ckeditor/ckeditor5-build-classic.git
  • 下载完成后 packages 中就是基础编辑器包,随便选个(例如:经典编辑器ckeditor5-build-classic),这个包就是官网 Demo 中的经典编辑器 classic

  • 打开 ckeditor5-build-classic 项目,运行 $ npm install 安装依赖,通过 $ npm run build 生成 build 文件夹,build 文件夹中就是打包好的编辑器,通过导入项目使用即可,项目中有 index.html 文件已经引用并实现编辑器,所以调整打包之后,直接访问 index.html 就能看到效果。

  • @ckeditor/ckeditor5-alignment 插件举例,经典编辑器默认是不支持 alignment 内容居中排版样式的
$ npm install --save-dev @ckeditor/ckeditor5-alignment
  • 安装好插件之后,直接使用。(注意只需要看 // <--- 新加的插件 的位置)
/**
 * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
// The editor creator to use.
import ClassicEditorBase from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';
import UploadAdapter from '@ckeditor/ckeditor5-adapter-ckfinder/src/uploadadapter';
import Autoformat from '@ckeditor/ckeditor5-autoformat/src/autoformat';
import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold';
import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic';
import BlockQuote from '@ckeditor/ckeditor5-block-quote/src/blockquote';
import CKBox from '@ckeditor/ckeditor5-ckbox/src/ckbox';
import CKFinder from '@ckeditor/ckeditor5-ckfinder/src/ckfinder';
import EasyImage from '@ckeditor/ckeditor5-easy-image/src/easyimage';
import Heading from '@ckeditor/ckeditor5-heading/src/heading';
import Image from '@ckeditor/ckeditor5-image/src/image';
import ImageCaption from '@ckeditor/ckeditor5-image/src/imagecaption';
import ImageStyle from '@ckeditor/ckeditor5-image/src/imagestyle';
import ImageToolbar from '@ckeditor/ckeditor5-image/src/imagetoolbar';
import ImageUpload from '@ckeditor/ckeditor5-image/src/imageupload';
import Indent from '@ckeditor/ckeditor5-indent/src/indent';
import Link from '@ckeditor/ckeditor5-link/src/link';
import List from '@ckeditor/ckeditor5-list/src/list';
import MediaEmbed from '@ckeditor/ckeditor5-media-embed/src/mediaembed';
import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
import PasteFromOffice from '@ckeditor/ckeditor5-paste-from-office/src/pastefromoffice';
import PictureEditing from '@ckeditor/ckeditor5-image/src/pictureediting';
import Table from '@ckeditor/ckeditor5-table/src/table';
import TableToolbar from '@ckeditor/ckeditor5-table/src/tabletoolbar';
import TextTransformation from '@ckeditor/ckeditor5-typing/src/texttransformation';
import CloudServices from '@ckeditor/ckeditor5-cloud-services/src/cloudservices';
import Alignment from '@ckeditor/ckeditor5-alignment/src/alignment';     // <--- 新加的插件
export default class ClassicEditor extends ClassicEditorBase {}
// Plugins to include in the build.
ClassicEditor.builtinPlugins = [
        Essentials,
        UploadAdapter,
        Autoformat,
        Bold,
        Italic,
        BlockQuote,
        CKBox,
        CKFinder,
        CloudServices,
        EasyImage,
        Heading,
        Image,
        ImageCaption,
        ImageStyle,
        ImageToolbar,
        ImageUpload,
        Indent,
        Link,
        List,
        MediaEmbed,
        Paragraph,
        PasteFromOffice,
        PictureEditing,
        Table,
        TableToolbar,
        TextTransformation,
        Alignment               // <--- 新加的插件
];
// Editor configuration.
ClassicEditor.defaultConfig = {
        toolbar: {
                items: [
                        'heading',
                        '|',
                        'alignment',        // <--- 新加的插件
                        'bold',
                        'italic',
                        'link',
                        'bulletedList',
                        'numberedList',
                        '|',
                        'outdent',
                        'indent',
                        '|',
                        'uploadImage',
                        'blockQuote',
                        'insertTable',
                        'mediaEmbed',
                        'undo',
                        'redo'
                ]
        },
        image: {
                toolbar: [
                        'imageStyle:inline',
                        'imageStyle:block',
                        'imageStyle:side',
                        '|',
                        'toggleImageCaption',
                        'imageTextAlternative'
                ]
        },
        table: {
                contentToolbar: [
                        'tableColumn',
                        'tableRow',
                        'mergeTableCells'
                ]
        },
        // This value must be kept in sync with the language defined in webpack.config.js.
        language: 'en'
};
  • 调整好之后,进行打包
$ npm run build
$ yarn run build
  • 然后打开 sample/index.html 进行预览效果,插件就支持成功了,如果需要更多的插件,就一直安装支持打包使用就行了。

三、发布到 NPM 进行使用(这个可选,也可以直接使用)

$ npm publish
  • 然后到项目中去使用,以 vue 项目举例,到项目中安装自定义编辑器 dzm-editor
$ npm install dzm-editor
  • 案例代码,跟使用官方的编辑器一样的使用,也就是导入路径管换了下,还可以支持自定义上传图片等功能封装在里面,使用的效果跟上面一致。
<template>
  <!-- ckeditor 父元素 -->
  <div class="editor-view">
    <!-- 编辑器 -->
    <ckeditor :editor="editor" v-model="editorData" :config="editorConfig" @ready="onReady"></ckeditor>
  </div>
</template>
<script>
// 经典编辑器($ npm install --save @ckeditor/ckeditor5-build-classic)
// import Editor from '@ckeditor/ckeditor5-build-classic'
// 中文包(语言包都在 build 版本中,注意 ckeditor5-build-xxx,xxx 需要替换为安装的编辑器包路径)
// import '@ckeditor/ckeditor5-build-classic/build/translations/zh-cn'
// 使用别人自定义的编辑器
import Editor from 'dzm-editor'
// 中文包
import 'dzm-editor/translations/zh-cn'
export default {
  data () {
    return {
      // 编辑器对象
      editor: Editor,
      // 编辑内容
      editorData: '<p>Content of the editor</p>',
      // 编辑器配置
      editorConfig: {
        // 配置语言
        language: 'zh-cn'
        // 功能栏
        // toolbar: {
        //   items: ['Bold', 'Italic', 'Link' ...]
        // }
        // 更多的配置....
      }
    }
  },
  methods: {
    onReady (editor) {
      // 获得编辑器对象...
    }
  }
}
</script>


相关文章
|
5月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
437 17
|
5月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
199 0
|
9月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
309 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
缓存 监控 JavaScript
如何优化 Vue 的执行流程?
【10月更文挑战第2天】
327 124
|
12月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
261 64
|
12月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
393 64
|
12月前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
624 61
|
12月前
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
JavaScript API
vue3知识点:自定义hook函数
vue3知识点:自定义hook函数
141 2
|
JavaScript 前端开发 API
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
2050 0