Electron require() не определен

Я создаю приложение Electron для своих собственных целей. Моя проблема в том, что когда я использую функции узла внутри моей HTML-страницы, она выдает ошибку:

'require()' не определено.

Есть ли способ использовать функциональность Node на всех моих HTML-страницах? Если это возможно, приведите пример того, как это сделать, или укажите ссылку. Вот переменные, которые я пытаюсь использовать на моей странице HTML:

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

и это значения, которые я использую во всех моих окнах HTML в Electron.

Ответ 1

Начиная с версии 5 значение по умолчанию для nodeIntegration изменилось с true на false. Вы можете включить его при создании окна браузера:

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

Ответ 2

По соображениям безопасности вы должны оставить nodeIntegration: false и использовать сценарий предварительной загрузки, чтобы предоставить именно то, что вам нужно от Node/Electron API, процессу рендеринга (просмотра) через переменную окна.

Скрипты предварительной загрузки продолжают иметь доступ к функциям require и другим функциям 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();
});

Ответ 3

Вы используете nodeIntegration: false при инициализации BrowserWindow? Если это так, установите значение true (значение по умолчанию - true).

И включите ваши внешние скрипты в HTML как это (не как <script> src="./index.js" </script>):

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

Ответ 4

Наконец, я заставил его работать. Добавьте этот код в свой HTML-элемент Script Script.

Извините за поздний ответ. Я использую приведенный ниже код, чтобы сделать это.

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

И используйте nodeRequire вместо использования require.

Он работает отлично.