web-dev-qa-db-fra.com

electron 5.0.0 "Uncaught ReferenceError: require n'est pas défini"

J'avais initialement utilisé électron stable (4.x.x), et j'ai pu utiliser require dans mon navigateur et les processus de rendu. J'ai effectué une mise à niveau vers electron beta (5.0.0) car j'avais besoin d'une version plus récente de node et j'ai rencontré ce message d'erreur dans mon processus de rendu, Uncaught ReferenceError: require is not defined.

En recherchant sur Google et en parcourant les documents électroniques, j'ai trouvé des commentaires disant que l'erreur pouvait être causée en définissant webPreferences.nodeIntegration Sur false lors de l'initialisation du BrowserWindow; par exemple: new BrowserWindow({width, height, webPreferences: {nodeIntegration: false}});. Mais je ne faisais pas cela, alors j'ai pensé que quelque chose d'autre devait être le problème et j'ai continué à chercher une résolution.

37
junvar

Il s'avère que nodeIntegration était vrai par défaut dans les versions électroniques précédentes, mais faux par défaut dans 5.0.0. Par conséquent, le définir sur true a résolu mon problème. Ne trouvant pas ce changement documenté en ligne dans les commentaires ou sur la page des électrons, je pensais que je ferais ce post SO) pour le rendre plus facile à trouver pour les futures personnes qui rencontrent ce problème.

47
junvar

Comme junvar dit, nodeIntegration est maintenant faux par défaut dans 5.0.0.

electronjs FAQ a un exemple de code sur la façon de définir cette valeur:

let win = new BrowserWindow({
  webPreferences: {
    nodeIntegration: false
  }
})
win.show()
39
Stev

définissez nodeIntegration sur true lors de la création d'une nouvelle fenêtre de navigateur.

app.on('ready', () => {
    mainWindow = new BrowserWindow({
        webPreferences: {
            nodeIntegration: true
        }
    });
});
15
Sri Darshana

junvar a raison, nodeIntegration est faux par défaut dans v5.0.0.

C'est la dernière instruction dans le Other Changes section de Notes de version pour v5.0. et a également été mentionné dans ce PR

6
dspring

Les lecteurs de cet article doivent lire la section Ne pas activer l'intégration Node.js pour le contenu distant dans la section Sécurité, capacités natives et votre responsabilité Guide avant de prendre une décision.

// Bad
const mainWindow = new BrowserWindow({
  webPreferences: {
    nodeIntegration: true,
    nodeIntegrationInWorker: true
  }
})
mainWindow.loadURL('https://example.com')

// Good
const mainWindow = new BrowserWindow({
  webPreferences: {
    preload: path.join(app.getAppPath(), 'preload.js')
  }
})
mainWindow.loadURL('https://example.com')
4
ShapCyber