Ответ 1
Из remote docs:
В Electron, связанные с GUI модули (такие как диалог, меню и т.д.) доступны только в основном процессе, а не в процессе визуализации. Чтобы использовать их в процессе рендеринга, модуль ipc необходим для отправки сообщений межпроцессного процесса в основной процесс. С помощью удаленного модуля вы можете вызывать методы основного процесса объект без явной отправки сообщений между процессами, аналогичный Java RMI. Пример создания окна браузера из средства визуализации Процесс:
const remote = require('electron').remote; const BrowserWindow = remote.BrowserWindow; var win = new BrowserWindow({ width: 800, height: 600 }); win.loadURL('https://github.com');
В основном модуль remote
позволяет легко делать материал, обычно ограниченный основным процессом в процессе рендеринга без большого количества ручных сообщений ipc взад и вперед.
Итак, в процессе рендеринга вместо:
const ipc = require('electron').ipcRenderer;
ipc.send('show-dialog', { msg: 'my message' });
ipc.on('dialog-shown', () => { /*do stuff*/ });
(И тогда в главном тексте нужно сделать материал в ответ на эти сообщения).
Вы можете просто сделать это все в рендерере:
const remote = require('electron').remote;
const dialog = remote.require('dialog')
dialog.showErrorBox('My message', 'hi.');
Модуль ipc явно не требуется (хотя это происходит для вас за кулисами). Не сказать, что эти два являются взаимоисключающими.
Еще один вопрос при использовании пульта. Можно ли получить доступ к функции, которая существует в основном процессе, а не в модуле?
Я думаю, что вы действительно спрашиваете: как я могу совместно использовать код между процессами main/renderer и как мне нужен модуль в рендерере?
EDIT: вы можете просто потребовать его, как обычно. Краевым случаем этого является то, что текущий URL-адрес окна рендеринга не указывает на локальный файл (не загружается с использованием файла://). Если вы загружаете удаленный URL-адрес, требуемый путь должен быть абсолютным, или вы можете использовать удаленный, как я сказал ниже.
OLD:
Это еще один вариант использования для remote
. Например:
remote.require('./services/PowerMonitor.js')
Обратите внимание, что использование удаленного типа приводит к тому, что ваш код запускается в контексте основного процесса. Возможно, это будет полезно, но я буду осторожен.
Требуются встроенные модули node или electron
, как обычно:
require('electron')
require('fs')
Можно ли получить доступ к глобальным переменным из средства визуализации?
Да.
//in main
global.test = 123;
//in renderer
remote.getGlobal('test') //=> 123