#javascript #reactjs #webpack #electron #create-react-app
#javascript #reactjs #webpack #electron #create-react-app
Вопрос:
Я хочу создать приложение Electronjs с некоторыми шаблонами react. Я думаю, что лучшим является тот, у которого больше всего звезд в github, но я открыт для предложений. Моя цель — иметь одно окно, которое будет основным, и другое, которое будет отображаться только тогда, когда пользователь нажимает на лоток (https://github.com/sfatihk/electron-tray-window ). Каково наилучшее решение, без использования второго html и, если возможно, без извлечения.
Комментарии:
1. Имейте в виду, что большинство дистрибутивов Linux не могут взаимодействовать с Electron, где на экране находится значок в трее, поэтому вам, вероятно, придется полагаться на положение мыши в Linux.
Ответ №1:
Недавно я исследовал методы интеграции Election React, и я настоятельно рекомендую использовать electron-forge и добавлять React следующим образом: https://blog.logrocket.com/electron-forge-vs-electron-react-boilerplate /
Эта статья дает вам хороший контекст от опытного инженера Slack, но, по сути, рекомендует вам следовать этому в документах electron-forge: https://www.electronforge.io/guides/framework-integration/react-with-typescript
Это самая простая возможная интеграция, и вы будете на прочной основе с electron-forge, а не с шаблоном GitHub.
Однако я начал с проекта create-react-app. При объединении 2 фреймворков, каждый с большим package.json и множеством инструментов сборки, мне не нравится объединять их package.json в один проект. Вместо этого я вложил проект CRA в electron-forge, и я говорю electron загрузить папку / build из CRA. Это работает для упаковки приложения, но во время разработки я использую electron-is-dev для загрузки сервера CRA dev на порт 3001. Используйте конфигурацию .env, чтобы изменить порт, используемый сервером разработки CRA, на 3001, потому что electron-forge и CRA хотят использовать 3000 по умолчанию.
Чтобы связать действия из вашего окна в трее с главным окном приложения, используйте сообщения IPC для связи между этими 2 средствами визуализации, а основной процесс между ними для передачи сообщений.
Комментарии:
1. Итак, вы говорите, что я должен сказать electron загружать разные сборки как для лотка, так и для главного окна?
2. @yovchokalev лоток и главное окно — это 2 отдельных процесса рендеринга electron, запущенных в их собственных окнах Chromium. Это означает, что если вы используете React, это оба 2 разных приложения. Затем вы используете «основной» процесс electron для обмена данными между ними по мере необходимости. Если вы воспользуетесь простым подходом, описанным в blog amp; electron docs, webpack позаботится о создании за вас. В моей дополнительной информации объясняется, как использовать create-react-app, и для этого метода потребуется скопировать 2 сборки из CRA в ваш пакет приложений electron. Я бы использовал первый простой способ и пропустил CRA, если вы начинаете заново.
Ответ №2:
Вашим лучшим решением, учитывая существующие параметры, вероятно, будет иметь отдельный маршрут в вашем приложении (поскольку вам не нужна отдельная html-страница), и при нажатии на значок в трее подключите его к чему-то вроде
const window = new BrowserWindow();
window.loadUrl('path/to/app/special/route');
Ответ №3:
Для этого вы можете использовать Tray в electron
Цитата из документации лотка
Добавьте значки и контекстные меню в область уведомлений системы.
Пример кода:
const { app, Menu, Tray } = require('electron')
let tray = null
app.whenReady().then(() => {
tray = new Tray('/path/to/my/icon')
const contextMenu = Menu.buildFromTemplate([
{ label: 'Item1', type: 'radio' },
{ label: 'Item2', type: 'radio' },
{ label: 'Item3', type: 'radio', checked: true },
{ label: 'Item4', type: 'radio' }
])
tray.setToolTip('This is my application.')
tray.setContextMenu(contextMenu)
})
Комментарии:
1. Это не то, о чем я спрашиваю. Мне нужно иметь отдельные окна, одно для лотка (с использованием пакета, который я связал) и одно главное окно. Вы показываете мне, как создать лоток с меню. Вопрос больше о том, как обрабатывать маршруты и конфигурации webpack
2. затем добавьте больше деталей в свой вопрос. Я не знаю, почему вы делаете это, используя отдельный пакет, когда electron уже имеет встроенную поддержку для этого
3. В документах ничего нет об окне браузера, которое открывается при нажатии на лоток и всегда появляется в зависимости от порядка и ОС
4. вы можете написать этот код самостоятельно. это должно быть просто