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
.
Он работает отлично.
Ответ 5
вам нужно добавить зависимость require.js.
http://requirejs.org/docs/download.html