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.
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.
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()
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
}
});
});
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
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')