Как добавить пользовательский плагин в сборку CKEditor 5? - PullRequest
0 голосов
/ 01 ноября 2019

Используемые инструменты:

Intro

Я изучаю, как использовать CKEditor 5 и как добавлять и создавать плагины. Я успешно добавил существующий и официальный плагин, следуя этому руководству:

https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/installing-plugins.html#adding-a-plugin-to-a-build

Говорят, что есть два способа добавления плагинов в CKEditor 5. По сути, вы можете использоватьготовых сборок и добавления к ним плагинов, или вы можете изменить настройки создания редактора.

Преимущество изменения сборки состоит в том, что вам больше не нужно ничего настраивать при создании экземпляра CKEditor, поскольку всеуже был построен с нужными настройками. Кроме того, клиентскому приложению не нужно делать новый дистрибутив с, например, Webpack, импортируя код.

Как я делал процесс

Я не использую Git / GitHub в своей разработкепроцесс, поэтому я скачал zip-файл ckeditor5-build-classic из этого репозитория Git , и переместил внутреннее содержимое в нужную папку. Используя код Visual Studio, я открыл папку как проект и начал манипулировать ею, следуя тем же процедурам, которые описаны в упомянутом руководстве:

npm install

Затем:

npm install --save-dev @ckeditor/ckeditor5-alignment

Я сделалте же самые изменения исходного кода src/ckeditor.js и, наконец, создание сборки с помощью следующей команды:

npm run build

После создания сборки я поместил все 3 результирующих файла (ckeditor.js, ckeditor.js. папку с картой и переводами) вместе со страницей index.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="ckeditor.js"></script>
    <script type="text/javascript" src="jquery-3.4.1.min.js"></script>
    <script type="text/javascript" src="app.js"></script>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div id="editor-container">
        <div id="editor">CKEditor content.</div>
    </div>
</body>
</html>

Моя структура каталогов:

 Test App+
 |---index.html
 |---app.js
 |---jquery-3.4.1.min.js
 |---ckeditor.js
 |---ckeditor.js.map
 |---translations (folder)
 |---styles.css

Вот мой app.js:

$( document ).ready(function() {
    ClassicEditor
        .create(document.querySelector('#editor'))
        .then(editor => {
            console.log('CKEditor is ready.');
        })
        .catch(error => {
           console.error('Error: ' + error); 
        });
});

Когда я открываю index.html, CKEditor 5 работает замечательно и включает в себя добавленный плагин.

Создание собственного плагина ( проблема )

Установка плагина таким способомочень легко и практично, поэтому я попытался создать свой собственный плагин и выполнить тот же процесс для его установки. Для этого я следовал следующим указаниям:

https://ckeditor.com/docs/ckeditor5/latest/framework/guides/tutorials/implementing-a-block-widget.html https://ckeditor.com/docs/ckeditor5/latest/framework/guides/creating-simple-plugin.html https://github.com/ckeditor/ckeditor5-alignment

Мой проект соответствует этой структуре:

 MyPlugin+
 |---package.json
 |---package-lock.json
 |---src+
 |---|---myplugin.js
 |---|---myplugin_ui.js
 |---|---myplugin_editing.js
 |---node_modules+
 |---|---lodash-es (folder)
 |---|---ckeditor5 (folder)
 |---|---@ckeditor (folder)

package.json:

{
  "name": "myplugin",
  "version": "1.0.0",
  "description": "My first CKEditor 5 plugin project.",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "RDS",
  "license": "ISC",
  "dependencies": {
    "@ckeditor/ckeditor5-core": "^15.0.0",
    "@ckeditor/ckeditor5-ui": "^15.0.0"
  }
}

myplugin.js:

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
import MyPlugin_ui from './myplugin_ui';
import MyPlugin_editing from './myplugin_editing';

export default class MyPlugin extends Plugin
{
    static get requires()
    {
        return [MyPlugin_editing , MyPlugin_ui];
    }
}

myplugin_ui.js:

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';

export default class MyPlugin_ui extends Plugin
{
    init()
    {
        console.log('MyPlugin_ui#init() has been called.');
    }
}

myplugin_editing.js:

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';

export default class MyPlugin_editing extends Plugin
{
    init()
    {
        console.log('MyPlugin_editing#init() has been called.');
    }
}

Когда я устанавливаю плагин в проект CKEditor 5, сборка успешно создается. Однако при тестировании редактора браузер показывает следующую проблему:

ckeditor-duplicated-modules

https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/error-codes.html#error-ckeditor-duplicated-modules

В показанной ссылке сказано:

Следовательно, вы никогда не должны добавлять плагины к существующей сборке , если ваш плагин не имеет зависимостей.

Но в то же время, на странице учебника учат противоположному:

https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/installing-plugins.html#adding-a-plugin-to-a-build

У меня нет особого опыта использования Node JS или npm. Я уверен, что у меня есть некоторая неправильная конфигурация в моем проекте, но я не знаю где. Я считаю, что это может быть в моем файле package.json.

Что я пробовал

  1. Удалить node_modules и package-lock.json файлы из проекта плагина.

Последствия:

При сборке сборки CKEditor с установленным плагином Webpack говорит:

ERROR in ../MyPlugin/src/myplugin.js
Module not found: Error: Can't resolve '@ckeditor/ckeditor5-core/src/plugin' in 'C:\Users\RDS\Desktop\CKEditor\MyPlugin\src'
 @ ../MyPlugin/src/myplugin.js 1:0-57 5:38-44
 @ ./src/ckeditor.js

ERROR in ../MyPlugin/src/myplugin_editing.js
Module not found: Error: Can't resolve '@ckeditor/ckeditor5-core/src/plugin' in 'C:\Users\RDS\Desktop\CKEditor\MyPlugin\src'
 @ ../MyPlugin/src/myplugin_editing.js 1:0-57 3:46-52
 @ ../MyPlugin/src/myplugin.js
 @ ./src/ckeditor.js

ERROR in ../MyPlugin/src/myplugin_ui.js
Module not found: Error: Can't resolve '@ckeditor/ckeditor5-core/src/plugin' in 'C:\Users\RDS\Desktop\CKEditor\MyPlugin\src'
 @ ../MyPlugin/src/myplugin_ui.js 1:0-57 3:41-47
 @ ../MyPlugin/src/myplugin.js
 @ ./src/ckeditor.js

ERROR in chunk main [entry]
ckeditor.js
C:\Users\RDS\Desktop\CKEditor\ckeditor5-build-classic-master\src\ckeditor.js 15684830ec81692702e020bf47ce4f65
Unexpected token (4:26)
| 
| 
| class MyPlugin_ui extends !(function webpackMissingModule() { var e = new Error("Cannot find module '@ckeditor/ckeditor5-core/src/plugin'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())
| {
|     init()
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! @ckeditor/ckeditor5-build-classic@15.0.0 build: `webpack --mode production`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the @ckeditor/ckeditor5-build-classic@15.0.0 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\RDS\AppData\Roaming\npm-cache\_logs\2019-11-01T12_40_26_177Z-debug.log
Изменение зависимостей между свойствами dependencies и devDependencies, установленными в package.json.

Последствия: происходят те же вещи.

Все зависимости проекта CKEditor 5установить на devDependencies в package.json. Установка моего плагина в проекте CKEditor 5 уже была выполнена двумя существующими режимами:

И снова показаны те же проблемы. Ах! Также произошло нечто странное. Я уже говорил, что правильно выполнил установку плагина выравнивания CKeditor 5. Я даже показал, как это было сделано. После всех этих проблем я попытался установить плагин выравнивания локально. Я скачал его из репозитория, и я сделал ту же установку по ссылке, а также файл. При таком подходе плагин таинственным образом вызывал у меня проблему ckeditor-duplicated-modules, как уже упоминалось ранее.

Я не знаю точно, как было бы правильно установить этот плагин из самого CKEditor 5 локально без загрузки из интернета (с npm install <module name> из репозитория npm). Я прекрасно понимаю, что делаю что-то не так, но не могу понять, что это такое. Я был бы признателен, если бы кто-нибудь мог дать мне советы, альтернативы и, конечно, возможно, решение. Я пытался в течение нескольких дней, и я не знаю, что я могу и не могу сделать больше. Буду очень признателен, если кто-нибудь сможет мне помочь.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

После неудачного поиска решения я узнал, что могу обратиться за помощью в репозиторий ckeditor git. Пожалуйста, следуйте следующий адрес для решения:

https://github.com/ckeditor/ckeditor5/issues/5699

0 голосов
/ 05 ноября 2019

Возможно, это просто формулировка, но вам не нужно «устанавливать» свой собственный плагин. Просто добавьте информацию о плагине в файл \ src \ ckeditor.js (импорт, встроенные плагины [], панель инструментов [] и т. Д.). Затем выполните команду npm run build, и она будет включена в файл \ build \ ckeditor.js

. Вы измените файл \ src \ ckeditor.js так же, как и для плагина выравнивания, за исключением ссылкиваш местный плагин. Просто убедитесь, что имена ваших пользовательских плагинов совпадают.

Поскольку у вас нет кода панели инструментов пользовательского интерфейса, я думаю, все, что вам нужно, это импорт и запись в ClassicEditor.builtInPlugins = [..., MyPlugin]

Этого должно быть достаточно для проверки init

...