Нет встроенной поддержки в Electron (BYOEF)
Electron - это BYOEF (Bring Your Own Extension Framework), что означает, что в Electron нет встроенной поддержки расширений (и да, я сделал это срок до). VS Code и Atom реализовали свой собственный уровень расширения поверх Electron.
Для поддержки расширений необходимо реализовать два основных аспекта:
- API, который определяет все действия, которые разрешено выполнять расширениям, и все события, которые расширения могут подключаться.
- Система для упаковки, распространения, выбора и установки расширений.
Как 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, но это приведет к большой неразберихе).