You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单次构建中集成2个不同ckEditor5并解决editor.create不是函数报错

CKEditor5单次构建集成多编辑器create is not a function报错解决思路

根因说明

该报错核心是组件绑定的this.editor不是合法的CKEditor构造类,通常由多编辑器构建时导出配置错误、模块冲突、实例未正确加载三类问题导致。

解决步骤

  • 调整构建配置的导出规则,禁止多个编辑器共用默认导出,改用命名导出区分不同编辑器实例,webpack配置参考如下:
// webpack.config.js 核心配置片段
const path = require('path');

module.exports = {
  entry: {
    classic: './src/editors/classic.js',
    inline: './src/editors/inline.js'
  },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'ckeditor-[name].js',
    library: ['CKEditor', '[name]'],
    libraryExport: 'default',
    libraryTarget: 'umd'
  },
  // 其余配置保留官方要求的CKEditor构建规则即可
}
  • 每个编辑器的入口文件必须显式导出构造类,示例如下:
// src/editors/classic.js
import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';
// 其他所需插件导入...

export default class MyClassicEditor extends ClassicEditor {}

// 插件配置
MyClassicEditor.builtinPlugins = [Essentials /* 其余插件 */];
MyClassicEditor.defaultConfig = {
  // 对应编辑器配置项
};
  • 组件内导入时匹配对应的命名导出对象,确保赋值给组件的editor变量是正确的构造类:
// 组件内导入示例
import * as CKEditorBundle from './dist/ckeditor-classic';
// 赋值给组件属性
this.editor = CKEditorBundle.CKEditor.classic;
  • 若存在多编辑器插件重复打包冲突,需要拆分公共依赖:将两个编辑器共用的插件、核心依赖通过DllPlugin打包为公共动态链接库,避免依赖重复注册导致构造类被覆盖。
  • 增加组件渲染判断,确保editor构造类完全加载完成后再渲染编辑器组件,Angular项目可加*ngIf="editor",Vue项目可加v-if="editor",React项目可加条件渲染逻辑,避免未完成赋值就触发编辑器初始化。

内容的提问来源于stack exchange,提问作者Muhammad Usman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:27:02