Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

397
Views
Cómo usar preload.js correctamente en Electron

Estoy tratando de usar módulos Node (en este ejemplo, fs ) en mis procesos de renderer , como este:

 // main_window.js const fs = require('fs') function action() { console.log(fs) }

Nota: La función de action se llama cuando presiono un botón en mi main_window .

Pero esto da un error:

 Uncaught ReferenceError: require is not defined at main_window.js:1

Puedo resolver este problema, como lo sugiere esta respuesta aceptada , agregando estas líneas a mi main.js al inicializar main_window :

 // main.js main_window = new BrowserWindow({ width: 650, height: 550, webPreferences: { nodeIntegration: true } })

Pero, de acuerdo con los documentos , esto no es lo mejor que se puede hacer y, en cambio, debería crear un archivo preload.js y cargar estos módulos de Nodo allí y luego usarlo en todos mis procesos de renderer . Me gusta esto:

main.js :

 main_window = new BrowserWindow({ width: 650, height: 550, webPreferences: { preload: path.join(app.getAppPath(), 'preload.js') } })

preload.js :

 const fs = require('fs') window.test = function() { console.log(fs) }

main_window.js :

 function action() { window.test() }

¡Y funciona!


Ahora mi pregunta es, ¿no es contrario a la intuición que debería escribir la mayor parte del código de mis procesos de renderer en preload.js (porque solo en preload.js tengo acceso a los módulos de Node) y luego simplemente llamar a las funciones en cada archivo renderer.js (por ejemplo aquí, main_window.js )? ¿Qué no estoy entendiendo aquí?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Las cosas han progresado rápidamente en Electron, causando cierta confusión. El último ejemplo idiomático (lo mejor que puedo determinar después de mucho rechinar de dientes) es:

principal.js

 app.whenReady().then(() => {` let mainWindow = new BrowserWindow({` webPreferences: { preload: path.join(__dirname, 'preload.js'), contextIsolation: true }, width:640, height: 480, resizable: false }) ... rest of code

precargar.js

 const { contextBridge, ipcRenderer} = require('electron') contextBridge.exposeInMainWorld( 'electron', { sendMessage: () => ipcRenderer.send('countdown-start') } )

renderizador.js

 document.getElementById('start').addEventListener('click', _ => { window.electron.sendMessage() })
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!