Модуль не найден: Ошибка: не удается разрешить ‘fs’ — Electron

#electron #pdfjs #pdfjs-dist

#electron #pdf.js #pdfjs-dist

Вопрос:

Я работаю над программой просмотра PDF, по сути, это Mozilla pdf.js проект. Я клонировал репозиторий и установил зависимости, и все работает нормально, даже когда я пытаюсь создать проект gulp generic , он работает без каких-либо проблем.

Проблема возникла, когда я установил electron , чтобы создать настольную версию средства просмотра, все по-прежнему работало даже в приложении electron, но я использовал const { ipcRenderer } = require('electron') для отправки сообщений в основной процесс из окна браузера. Он также работает нормально, пока я не попытаюсь создать приложение gulp generic с помощью, оно выдает ошибку, в которой говорится Module not found: Error: Can't resolve 'fs' in '/*******/pdf.js/node_modules/electron' . Когда я удаляю require('electron') из скрипта, он строится правильно.

Мой код

 function webViewerLoad() {
  const isElectron =
    navigator.userAgent.toLowerCase().indexOf(" electron/") > -1;
  if (isElectron) {
    const { ipcRenderer } = require("electron");
    ipcRenderer.send("electron:reload", v);
  }
}


  document.addEventListener("DOMContentLoaded", webViewerLoad, true); 

Ошибка

введите описание изображения здесь

Комментарии:

1. похоже, ошибка в самом electron. можете ли вы опубликовать свой полный код?

2. @Nikasmusicandgaming вот оно: github.com/Crackiii/pdf.js/blob /…

Ответ №1:

Если кто-то застрял в такой же ситуации, я решил ее за несколько шагов после спокойного исследования.

Прежде всего, я использовал electron.js свой клиентский код и тот, который я использовал const { ipcRenderer } = require("electron"); . Браузер не знает о require если вы введете require в консоли браузера, вы получите сообщение об ошибке.

Чтобы преодолеть эту проблему, вы должны использовать browserify или любые подобные инструменты. Я использовал gulp.js , в моем проекте.

Во-вторых, в файле, который я использовал, использовалось несколько импортов, поэтому он не был включен. require('electron') import file from 'somefile.js' browserify Все, что мне нужно было запросить electron в отдельном .js файле и связать его.

ipc_electron.js

 const ipcRenderer  = window.require('electron'). ipcRenderer;
//Clear the localstorage when application is quitted/closed
window.addEventListener("message", ({ data }) => {
  if (data.type === "electron:reload") {
    ipcRenderer.send("electron:reload");
  }
});

ipcRenderer.on("pdf:url", _ => localStorage.clear()); 

Gulp.js

 gulp.task("browserify", () => {
  console.log();
  console.log("### Browserifying ipc_electron.js");
  return browserify("./web/ipc_electron.js", {
    debug: true,
    extensions: [".js"],
    ignoreMissing: true,
    detectGlobals: false,
    bare: true,
    debug: false,
    builtins: false,
    commondir: false,
  })
    .exclude("fs")
    .exclude("electron")
    .exclude("electron-updater")
    .exclude("electron-settings")
    .exclude("path")
    .exclude("url")
    .exclude("sqlite3")
    .exclude("express")
    .exclude("net")
    .exclude("body-parser")
    .bundle()
    .pipe(source("ipc_electron_bundle.js"))
    .pipe(gulp.dest("./web"));
});