es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ElectronJS – No se pueden leer las propiedades de indefinido (leyendo ‘whenReady’)

Tengo este código simple:

function myFunction() {
    const { app, BrowserWindow } = require('electron')

    const createWindow = () => {
        const win = new BrowserWindow({
            width: 800,
            height: 600
        })

        win.loadFile('index.html')
    }

    app.whenReady().then(() => {
        createWindow()
    })
}

myFunction()

Al ejecutar este código con node src/render.js, arroja este error:

/home/aditya/Documents/Codes/term-record/src/render.js:13
        app.whenReady().then(() => {
            ^
TypeError: Cannot read properties of undefined (reading 'whenReady')
    at render (/home/aditya/Documents/Codes/term-record/src/render.js:13:6)
    at Object.<anonymous> (/home/aditya/Documents/Codes/term-record/src/render.js:18:1)
    at Module.compile (node:internal/modules/cjs/loader:1101:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79:12)
    at node:internal/main/run_main_module:17:47

¡Tenga en cuenta que he envuelto intencionalmente todo el código dentro de una función!

Mis versiones de Node: v16.11.1, NPM: 8.1.3 y la versión de Electron es: 16.0.1.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que el objeto app está indefinido, lo que significa que no ha sido incluido o importado correctamente en el script.

    Una posibilidad es que el módulo electron no haya sido instalado, lo cual se puede hacer usando npm ejecutando el comando npm install electron en la terminal.

    Otra posibilidad es que electron no esté siendo requerido/importado correctamente: esto se puede verificar asegurándose de que la siguiente línea esté al inicio del archivo, antes de cualquier otro código:

    const { app, BrowserWindow } = require('electron');
    

    Si el problema persiste, puede valer la pena verificar si el módulo app realmente tiene un método whenReady() – este método fue agregado en Electron 11.0.0, por lo que si la versión instalada es inferior, el método puede no estar disponible.

    Si ese es el caso, otra forma de crear una ventana después de que la aplicación esté lista es usar el método app.on('ready', () => { ... }) en su lugar:

    function myFunction() {
      const { app, BrowserWindow } = require('electron');
    
      const createWindow = () => {
        const win = new BrowserWindow({
          width: 800,
          height: 600
        });
    
        win.loadFile('index.html');
      };
    
      app.on('ready', createWindow);
    }
    
    myFunction();
    

    Este código escucha el evento ready y llama a la función createWindow() cuando se recibe, lo que debería abrir la ventana.

Comments are closed.