javascript - 在 Angular 应用程序中使用 CKEditor5 自定义构建
问题描述
我正在构建一种文章编辑器,为此我使用Angular Integration for CKEditor5;按照文档,我可以正确使用ClassicEditor
构建ckeditor
。
这些是我的文件:
import { Component, OnInit } from '@angular/core';
import * as ClassicEditor from '@ckeditor/ckeditor5-build-classic';
@Component({
selector: 'app-edit-article',
templateUrl: './edit-article.component.html',
styleUrls: ['./edit-article.component.scss']
})
export class EditArticleComponent implements OnInit {
constructor() { }
public Editor = ClassicEditor;
articleForm: FormGroup;
ngOnInit() {
}
}
模板
<div class="row">
<div class="col-12">
<label for="">Content</label>
<ckeditor [editor]="Editor" id="editor" class="blue-scroll--light" formControlName="content"></ckeditor>
</div>
</div>
不幸的是,ClassicEditor
指南中引用的构建不包含许多插件,因此我尝试添加其中一些,如文本对齐、字体颜色、字体大小等。
似乎我需要创建一个包含所有所需功能的自定义构建,然后ClassicEditor
在我理解正确的情况下引用该构建而不是在我的打字稿文件中,所以我继续使用他们的在线构建器创建一个包含所有插件已经包括在内,但在那之后我不确定如何继续,文档也不是很清楚。
据我了解,我需要build
在我的 Angular 应用程序中添加文件夹,然后ckeditor.js
在我的组件中导入文件,如下所示:
import * as Editor from '../../../../../core/libs/ckeditor5/build/ckeditor';
并更改编辑器的声明以使用该导入而不是ClassicEditor
,因此:
public Editor = Editor;
但是,一旦我进行了更改,我什至无法再运行该应用程序,因为我收到以下错误:
ERROR Error: Uncaught (in promise): CKEditorError: ckeditor-duplicated-modules: Some CKEditor 5 modules are duplicated. Read more: https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/error-codes.html#error-ckeditor-duplicated-modules
CKEditorError: ckeditor-duplicated-modules: Some CKEditor 5 modules are duplicated. Read more: https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/error-codes.html#error-ckeditor-duplicated-modules
at Object.<anonymous> (ckeditor.js:5)
at Object.push../src/app/core/libs/ckeditor5/build/ckeditor.js (ckeditor.js:5)
at i (ckeditor.js:5)
at Module.<anonymous> (ckeditor.js:5)
at i (ckeditor.js:5)
at push../src/app/core/libs/ckeditor5/build/ckeditor.js (ckeditor.js:5)
at ckeditor.js:5
at ckeditor.js:5
at Object../src/app/core/libs/ckeditor5/build/ckeditor.js (ckeditor.js:5)
at __webpack_require__ (bootstrap:84)
at resolvePromise (zone.js:852)
at resolvePromise (zone.js:809)
at zone.js:913
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
at Object.onInvokeTask (core.js:30885)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:422)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:195)
at drainMicroTaskQueue (zone.js:601)
同样,文档说这是由于进行了多次导入,但我不明白如何,因为我只使用ckeditor.js
我刚刚生成的构建中的文件,如果在纯 HTML 文件中引用它可以正常工作。
有人可以提供一个关于如何在 Angular 应用程序中成功地使自定义构建工作的示例吗?
解决方案
过了一会儿,我发现问题似乎是我在我的应用程序的不同模块中导入了另一个构建。
所以我只是EditArticle
通过导入和使用该文件在我的组件中使用自定义构建,但我在其他模块上还有其他组件正在导入和使用ClassicEditor
我通过 NPM 安装的构建,这看起来像是导致错误。
修复不是删除包ClassicEditor
或删除import ClassicEditor
语句,而是确保该特定导入没有在应用程序的其他任何地方使用,因为我猜在编译期间 Angular 会删除所有未使用的导入。
完成此操作后,应用程序在我的自定义构建中运行良好。
只是为了清除它,我可以将这两个导入放在同一个文件或多个组件上
import * as ClassicEditor from '@ckeditor/ckeditor5-build-classic';
import * as Editor from 'src/app/core/libs/ckeditor5/build/ckeditor';
但我应该只在整个应用程序上使用其中一个,所以如果我有一个 Editor onComponent1
和 on Component2
,我可以同时导入两个构建,但是在 Editor 属性的声明中我应该只使用一个,它应该是应用程序使用的每个组件都使用相同的组件,因此:
这有效
组件1
import * as ClassicEditor from '@ckeditor/ckeditor5-build-classic';
import * as Editor from 'src/app/core/libs/ckeditor5/build/ckeditor';
public Editor = Editor;
组件2
import * as ClassicEditor from '@ckeditor/ckeditor5-build-classic';
import * as Editor from 'src/app/core/libs/ckeditor5/build/ckeditor';
public Editor = Editor;
这行不通_
组件1
import * as ClassicEditor from '@ckeditor/ckeditor5-build-classic';
import * as Editor from 'src/app/core/libs/ckeditor5/build/ckeditor';
public Editor = Editor;
组件2
import * as ClassicEditor from '@ckeditor/ckeditor5-build-classic';
import * as Editor from 'src/app/core/libs/ckeditor5/build/ckeditor';
public Editor = ClassicEditor;
您当然可以完全从导入中删除未使用的构建,这也可以。再说一遍,确保您在所有应用程序上使用相同的构建
推荐阅读
- c++ - 异步运行 SSLSocket
- javascript - 未捕获的类型错误:无法读取 HTMLAnchorElement 处未定义的属性“顶部”。
- django - Django LOGGING 不打印到控制台和文件
- reactjs - Rematch/Reducers - 编写测试用例时出错
- android - [Android] Plaid App 中的 LiveData 混淆
- python - Python3 打印CR和一些文本时,文本没有被擦除
- bash - linux将输出存储到变量的概念是什么?
- java - 从服务器通过 API 传输数据完成后,如何使用远程数据构建 recyclerview
- java - Quarkus Panache Hibernate:如何清除缓存,使实体世界匹配数据库状态?
- javascript - 首次使用后删除该功能