Electron window.require не является функцией, даже если для nodeIntegration установлено значение true - PullRequest
0 голосов
/ 04 апреля 2020

У меня возникли некоторые проблемы с приложением Electron + Create React App, которое я создаю. Это автономное приложение для расчета стоимости, мне нужно сохранить пару пользовательских настроек, для этого я использовал https://github.com/sindresorhus/electron-store. Как и с большинством электронных модулей, я должен импортировать его как:

const Store = window.require("electron-store");

, чтобы избежать конфликтов в веб-пакете. Поиском я обнаружил, что для большинства людей установка nodeIntegration: true при создании BrowserWindow для электрона позволит избежать этой проблемы, но это не мой случай, я продолжаю получать ту же ошибку.

Что я уже пробовал:

  1. Использование простого require: приводит к TypeError: fs.existsSyn c не является функцией, а в консоли: не может разрешить 'worker_threads' в '... \ node_modules \ write- file-atomi c '

  2. Используйте модуль для переопределения конфигурации 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();
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...