Electron.remote is undefined

node.jsElectron

node.js Problem Overview


I have trouble with using Electron. As you can see the title, when i load remote module, it saids it is undefined. This is the code of entry js:

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

function initApp() { ... }

app.on('ready', () => {
    initApp();

    console.log(electron);         // object, but no remote inside
    console.log(electron.remote);  // undefined
    console.log(remote);           // undefined
});

and i tried to follow official doc here: http://electron.atom.io/docs/api/remote/

with

const { remote } = electron;
const { BrowserWindow } = remote;

let win = new BrowserWindow({width: 800, height: 600});  // error! BrowserWindow is not a constructor blabla

...
remote.getCurrentWindow().focus();

i don't know what am i missing. any advice will very appreciate.

node.js Solutions


Solution 1 - node.js

Update 2020, since this answer still appears at the top. For the original answer to work in current versions of Electron, you need to set enableRemoteModule when creating the window in your main process.

const myWindow = new BrowserWindow({
    webPreferences: {
        enableRemoteModule: true
    }
}); 

Original answer:

remote is needed only to require other modules from inside a render process. In the main process you just get your modules directly from require('electron'). Which it looks like is done in the example just with remote unnecessarily added.

Render process:

const { remote } = require('electron');
const { BrowserWindow } = remote;

Main process:

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

Solution 2 - node.js

In electron 10.0.0, remoteModule is set false by default. So, if you want to use const {BrowserWindow, dialog } = require('electron').remote; in JavaScript file, then you must set enableRemoteModule as true in webPreferences.

const w = new BrowserWindow({
    webPreferences: {
        enableRemoteModule: true
    }
}); 

link: https://github.com/electron/electron/blob/master/docs/breaking-changes.md#default-changed-enableremotemodule-defaults-to-false

Solution 3 - node.js

The remote module was deprecated in Electron 12, and will be removed in Electron 14. It is replaced by the @electron/remote module.

// Deprecated in Electron 12:
const { BrowserWindow } = require('electron').remote
// Replace with:
const { BrowserWindow } = require('@electron/remote')

// In the main process:
require('@electron/remote/main').initialize()

Solution 4 - node.js

remote becomes undefined sometimes in electron all you have to do is to go to your main.js and add the following object while creating a window under webPreference set enableRemoteModule: true as shown bellow then your problem will be solved

 win = new BrowserWindow({
    width: 700,
    height: 600,
    hasShadow: true,
    webPreferences: {
      nodeIntegration: true,
      enableRemoteModule: true,
     },
  });

Solution 5 - node.js

i enabled remote module, still getting

index.html:43 Uncaught TypeError: Cannot read properties of undefined (reading 'getCurrentWindow')

for

const remote = require('electron').remote;

(or)

const { remote } = require('electron');

while using

remote.getCurrentWindow().close();

i did add

webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
            enableRemoteModule: true,
    }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmodernatorView Question on Stackoverflow
Solution 1 - node.jsTeakView Answer on Stackoverflow
Solution 2 - node.jsYumick GhartiView Answer on Stackoverflow
Solution 3 - node.jsHa0ranView Answer on Stackoverflow
Solution 4 - node.jscrispengariView Answer on Stackoverflow
Solution 5 - node.jsKanish RView Answer on Stackoverflow