Архитектура для расширяемого электронного приложения? - PullRequest
0 голосов
/ 15 марта 2020

Это несколько открытый вопрос, но каковы хорошие способы сделать хорошее расширяемое электронное приложение? VSCode, Atom и многие другие поддерживают расширения, но их кодовая база слишком велика, чтобы понять, что происходит для меня. Я очень удивлен Jupyterlab, по их мнению, он состоит из небольшого ядра, а все остальное - просто расширение поверх него. Поэтому мне было интересно, как эти приложения могут быть построены.

Specifi c У меня есть следующие вопросы:

  • Существуют ли лучшие методы для создания расширяемых архитектур?
  • Как получается, что электронная часть «распознает» расширение? Как это загружается? Когда он должен быть загружен?
  • Есть ли минимальный пример того, как это сделать? Предоставление этих двух примеров, в некотором смысле, ответило бы на весь вопрос:
    • Расширение, которое просто добавляет кнопку в определенное пространство страницы (так, как манипулировать dom из расширения)
    • Как добавить еще одну опцию в меню (так, как взаимодействовать с api электрона из расширения.)

1 Ответ

2 голосов
/ 18 марта 2020

Нет встроенной поддержки в Electron (BYOEF)

Electron - это BYOEF (Bring Your Own Extension Framework), что означает, что в Electron нет встроенной поддержки расширений (и да, я сделал это срок до). VS Code и Atom реализовали свой собственный уровень расширения поверх Electron.

Для поддержки расширений необходимо реализовать два основных аспекта:

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

Как VS Code обрабатывает расширения

Поскольку вы упомянули VS Code, давайте возьмем более детально рассмотрим его, чтобы увидеть, как он реализует расширения (это вполне может считаться де-факто рекомендацией для расширяемой архитектуры).

исходный код для обработки расширений

You упоминается попытка взглянуть на исходный код. Как вы упоминали, кодовая база VS Code огромна, но самый важный код, относящийся к расширениям , можно найти в папке src/vs/workbench/services/extensions/electron-browser .

Базовый c формат расширения

VS Код распределяет расширения в виде npm модулей. Это позволяет каждому расширению иметь зависимости от других npm модулей и позволяет VS Code легко обновлять расширения (что происходит при каждом его открытии).

Жизненный цикл установки расширения

Когда вы выберите установку расширения, оно загружается из VS Code npm хранилище . Установлены зависимости расширения (как обычно и автоматически, когда установлен пакет npm). Расширение экспортирует функцию activate, которая вызывается VS Code после того, как расширение полностью установлено.

Также экспортируется функция deactivate, чтобы ее можно было без проблем удалить.

VS Code API

VS Code предоставляет API для расширений, Они могут подписаться на события, чтобы прослушивать их, вызывать открытые функции API, регистрировать новых провайдеров или регистрировать новые команды для добавления новых функций.

Реализация запрошенной функциональности

Запрошенные вами примеры действительно зависят от того, что вы пытаетесь сделать и как вы хотите это сделать.

Чтобы добавить кнопку, ваша главная страница должна будет искать зарегистрированные кнопки и включать их на страницу. В способе работы VS Code каждое расширение регистрировало бы свою кнопку в функции activate(), если они этого хотели.

Точно так же, чтобы добавить опцию в меню, строка меню вашего приложения Electron должна будет искать любые зарегистрированные расширения меню и заполнять их меню. Опять же, расширения никогда не взаимодействуют с Electron API, только с API вашего приложения. Вам нужно будет явно определить API и сделать его доступным для расширения (или просто сделать доступным весь Electron API, но это приведет к большой неразберихе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...