web-dev-qa-db-fra.com

Electron require () n'est pas défini

Je crée une application Electron pour mes propres besoins. Mon problème est que lorsque j'utilise des fonctions de nœud dans ma page HTML, une erreur de:

'require ()' n'est pas défini.

Existe-t-il un moyen d'utiliser les fonctionnalités de Node dans toutes mes pages HTML? Si possible, donnez-moi un exemple de la procédure à suivre ou indiquez un lien. Voici les variables que j'essaie utiliser dans ma page HTML:

  var app = require('electron').remote; 
  var dialog = app.dialog;
  var fs = require('fs');

et ce sont les valeurs que j'utilise dans toutes mes fenêtres HTML dans Electron.

33
Mari Selvan

A partir de la version 5, la valeur par défaut pour nodeIntegration est passée de true à false. Vous pouvez l'activer lors de la création de la fenêtre du navigateur:

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

Pour des raisons de sécurité, vous devez conserver nodeIntegration: false et utiliser un script de préchargement pour exposer au processus de rendu tout ce dont vous avez besoin de l'API Node/Electron ) via la variable de fenêtre.

Les scripts de préchargement continuent d’avoir accès à require et à d’autres fonctionnalités de Node.js

https://electronjs.org/docs/tutorial/security#2-do-not-enable-nodejs-integration-for-remote-content

Exemple:

//main.js
const mainWindow = new BrowserWindow({
  webPreferences: {
    preload: path.join(app.getAppPath(), 'preload.js')
  }
})

preload.js:

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

let currWindow = remote.BrowserWindow.getFocusedWindow();

window.closeCurrentWindow = function(){
  currWindow.close();
}

renderer.js:

let closebtn = document.getElementById('closebtn');

closebtn.addEventListener('click', (e) => {
  e.preventDefault();
  window.closeCurrentWindow();
});
8
Rafael Croffi

Utilises-tu nodeIntegration: false pendant l’initialisation de BrowserWindow? Si tel est le cas, définissez-le sur true (la valeur par défaut est true).

Et incluez vos scripts externes dans le code HTML comme ceci (pas comme <script> src="./index.js" </script>):

<script>
   require('./index.js')
</script>
8
RoyalBingBong

Enfin, je l'ai fait fonctionner. Ajoutez ce code à votre élément HTML Script Element.

Désolé pour le retard Reply.I utilise le code ci-dessous pour faire cette chose.

window.nodeRequire = require;
delete window.require;
delete window.exports;
delete window.module;

Et utilisez nodeRequire au lieu d’utiliser require.

Ça fonctionne bien.

0
Mari Selvan