У меня возникли некоторые проблемы с приложением Electron + Create React App, которое я создаю. Это автономное приложение для расчета стоимости, мне нужно сохранить пару пользовательских настроек, для этого я использовал https://github.com/sindresorhus/electron-store. Как и с большинством электронных модулей, я должен импортировать его как:
const Store = window.require("electron-store");
, чтобы избежать конфликтов в веб-пакете. Поиском я обнаружил, что для большинства людей установка nodeIntegration: true при создании BrowserWindow для электрона позволит избежать этой проблемы, но это не мой случай, я продолжаю получать ту же ошибку.
Что я уже пробовал:
Использование простого require: приводит к TypeError: fs.existsSyn c не является функцией, а в консоли: не может разрешить 'worker_threads' в '... \ node_modules \ write- file-atomi c '
Используйте модуль для переопределения конфигурации webpack: я использовал craco, чтобы установить цель для рендера электронов. Это приводит к пустой странице, когда я запускаю приложение, с ошибкой в devtools, говорящей ReferenceError: require не определено
Дополнительная информация о том, что я не использую машинопись, а просто js так что использование «объявлять глобально» и так далее не будет работать
Моя публикация / электрон. js файл:
const electron = require("electron");
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const path = require("path");
const isDev = require("electron-is-dev");
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({
width: 900,
height: 680,
webPreferences: {
nodeIntegration: true
}
});
mainWindow.loadURL(
isDev
? "http://localhost:3000"
: `file://${path.join(__dirname, "../build/index.html")}`
);
mainWindow.on("closed", () => (mainWindow = null));
if (!isDev) mainWindow.setMenu(null);
}
app.on("ready", createWindow);
app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.quit();
}
});
electron.app.allowRendererProcessReuse = true;
app.on("activate", () => {
if (mainWindow === null) {
createWindow();
}
});