#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"));
});