Dalle remote documentazione:
In Electron, moduli GUI correlati (come finestra di dialogo, menù ecc) sono disponibili solo nel processo principale, non nel processo di rendering. Per poterli utilizzare dal processo di rendering, il modulo ipc è necessario per inviare messaggi inter-process al processo principale. Con il modulo remoto, è possibile richiamare i metodi dell'oggetto principale senza inviare messaggi inter-processo in modo esplicito, simili a RMI di Java. Un esempio di creazione di una finestra del browser da un renderer processo:
const remote = require('electron').remote;
const BrowserWindow = remote.BrowserWindow;
var win = new BrowserWindow({ width: 800, height: 600 });
win.loadURL('https://github.com');
Fondamentalmente il modulo remote
rende facile fare cose normalmente riservata al processo principale in un processo di rendering, senza un sacco di messaggi IPC manuali indietro e via.
Così, in un processo di rendering, invece di:
const ipc = require('electron').ipcRenderer;
ipc.send('show-dialog', { msg: 'my message' });
ipc.on('dialog-shown',() => { /*do stuff*/ });
(E poi il codice per lo più a fare cose in risposta a quei messaggi).
Si può solo fare tutto questo nel renderer:
const remote = require('electron').remote;
const dialog = remote.require('dialog')
dialog.showErrorBox('My message', 'hi.');
Il modulo IPC non è espressamente richiesta (anche se sta accadendo per voi dietro le quinte). Per non dire che i due si escludono a vicenda.
Un'ulteriore domanda quando si utilizza il telecomando. È possibile accedere a una funzione esistente nel processo principale anziché in un modulo?
Penso che quello che stai veramente chiedendo sia: come posso condividere il codice tra i processi main/renderer e come posso richiedere un modulo nel renderer?
MODIFICA: puoi semplicemente richiederlo come al solito. Un caso limite di questo è se l'attuale URL della finestra di rendering non è puntato su un file locale (non caricato utilizzando file: //). Se stai caricando un URL remoto, il percorso richiesto deve essere assoluto o puoi utilizzare il telecomando come ho detto di seguito.
VECCHIO:
Questo è un altro caso d'uso per remote
. Ad esempio:
remote.require('./services/PowerMonitor.js')
Si noti che l'utilizzo di questo tipo di telecomando fa sì che il codice venga eseguito nel contesto del processo principale. Questo potrebbe avere i suoi usi ma starei attento.
Module da incasso nodo o electron
essere richiesta come normale:
require('electron')
require('fs')
Posso accedere alle variabili globali dal renderer?
Sì.
//in main
global.test = 123;
//in renderer
remote.getGlobal('test') //=> 123
Grazie per questo. – user1513388
Un'ulteriore domanda quando si utilizza il telecomando. È possibile accedere a una funzione esistente nel processo principale piuttosto che in un modulo? – user1513388
In realtà lo stesso vale per le variabili globali, è possibile allegare anche a quelle del processo di rendering? – user1513388