npm installnpm startnpm run dist
Готовые установщики появятся в папке dist/.
На главной отображается горизонтальная карусель, содержащая пункты меню, добавленные плагинами (кроме стандартных «Главная», «Магазин», «Плагины», «Настройки»). Клик по карточке открывает соответствующую страницу. Карусель можно скрыть в настройках.
На странице «Плагины» для каждого плагина доступны:
Статистика вверху страницы: общее количество, активные, доступно в магазине.
Кнопка «Установить» открывает модальное окно с тремя вкладками:
.js файл. Автоматический анализ метаданных..js файл, нажать «Загрузить» для предпросмотра.При необходимости можно заполнить название, описание и версию вручную.
Всплывающие уведомления появляются справа вверху. История доступна по клику на иконку колокольчика (хранится до 50 записей).
Плагин — JavaScript-файл, который экспортирует функцию, принимающую объект pluginAPI. Метаданные указываются в блоке комментариев /** ... */.
/**
* @name Мой плагин
* @version 1.0.0
* @description Пример плагина
* @author Ваше имя
* @settings [{"id":"apiKey","label":"API ключ","type":"text"}]
*/
(function(pluginAPI) {
// код плагина
})(pluginAPI);
| Тег | Описание |
|---|---|
@name | Название плагина |
@version | Версия (строка) |
@description | Краткое описание |
@author | Автор |
@settings | JSON-массив с описанием настроек |
[{"id": "apiKey","label": "API ключ","type": "password","placeholder": "Введите ключ","hint": "Получите ключ на сайте"}{"id": "enableLogging","label": "Логирование","type": "switch","default": true}]
Внимание! Весь формат настроек плагина пишется в одну строку.
Поддерживаемые типы: text, password, url, textarea, switch (или checkbox), select (с полем options).
/**
* @name Hello World
* @version 1.0.0
* @description Добавляет страницу с приветствием.
* @author John Doe
* @settings [{"id":"greeting","label":"Текст","type":"text","default":"Привет, мир!"}]
*/
(function(api) {
const settings = api.getSettings();
api.addMenuItem('hello-page', 'fas fa-smile', 'Приветствие');
api.addPage('hello-page', `<h1>${settings.greeting}</h1><p>Страница плагина.</p>`);
api.showNotification('Плагин загружен', 'success');
})(pluginAPI);
Плагин получает объект pluginAPI со следующими методами:
| Метод | Описание |
|---|---|
showNotification(message, type) | type: 'success' (по умолч.), 'info', 'error'. |
getSettings() | Возвращает объект текущих настроек. |
saveSettings(settings) | Сохраняет настройки (слияние). |
addMenuItem(id, icon, label) | Добавляет пункт в боковое меню. icon — класс FontAwesome (например "fas fa-star"). |
removeMenuItem(id) | Удаляет пункт меню. |
addPage(id, content) | Добавляет страницу с HTML-содержимым. |
removePage(id) | Удаляет страницу. |
updatePageContent(id, content) | Обновляет содержимое страницы. |
navigateTo(pageId) | Переходит на страницу. |
getStorePlugins() | Возвращает массив плагинов из магазина. |
installFromStore(pluginId) | Устанавливает плагин из магазина. |
checkForUpdates() | Проверяет обновления для установленных плагинов. |
updatePlugin(pluginId) | Обновляет конкретный плагин. |
notifications — уведомления.autoStart — автозапуск плагинов.saveLogs — зарезервировано.showCarousel — показывать карусель на главной.panel — объект с видимостью элементов верхней панели.Сохраняются как массив идентификаторов страниц в localStorage.menuOrder. Изменяются drag-and-drop в разделе «Настройки меню».
autoUpdate — автоматическая проверка обновлений.storeUrl — URL JSON-файла со списком плагинов.Хранятся в config.json в папке пользовательских данных приложения.
port — порт (по умолч. 3000).cors — включить CORS.webSecurity — отключение политики same-origin в Electron.Экспорт в JSON, импорт из файла, полная очистка (сброс к умолчанию).
Через window.electronAPI (доступно только в Electron-версии):
reloadWindow()minimizeWindow()maximizeWindow()closeWindow() (скрывает в трей, а не закрывает)isMaximized()onUpdateMaximize(callback)При запуске появляется значок. Контекстное меню: «Открыть», «Перезагрузить приложение», «Выход». При закрытии окна оно скрывается в трей.
Правая кнопка мыши открывает меню с действиями: обновить, навигация, копировать/вставить, перезапустить приложение, выход.
Встроенный сервер раздаёт статические файлы из корня проекта. Доступен по адресу http://localhost:порт.
/
├── main.js # главный процесс Electron
├── preload.js # мост для безопасного API
├── package.json
├── index.html
├── styles.css
├── engine/ # рендер-скрипты
│ ├── electron.js
│ ├── main.js
│ ├── navigation.js
│ ├── notifications.js
│ ├── plugins.js
│ ├── settings.js
│ ├── state.js
│ ├── ui.js
│ └── utils.js
├── component/ # компоненты
│ ├── carousel.js
│ ├── menu-settings.js
│ └── store.js
└── ...
Чистый JS без фреймворков. Состояние в глобальных переменных, синхронизация с localStorage. Основные функции: renderPlugins(), renderCarousel(), filterStorePlugins().
Создание окна, трей, IPC-обработчики, запуск Express-сервера.
localStorage — плагины, темы, настройки, история уведомлений.config.json в userData — настройки сервера.Node.js 14+, npm/yarn.
"build": {
"appId": "com.mediamatrix.app",
"productName": "MediaMatrix",
"directories": { "output": "dist" },
"win": { "target": "nsis", "icon": "build/icon.ico" },
"mac": { "target": "dmg", "icon": "build/icon.icns" },
"linux": { "target": "AppImage", "icon": "build/icon.png" }
}
Для сборки: npm run dist.
NODE_ENV=development или раскомментировать mainWindow.webContents.openDevTools().http://localhost:3000 в браузере, но функции управления окном будут недоступны.%APPDATA%\MediaMatrix\config.json, macOS ~/Library/Application Support/MediaMatrix/config.json.