После сборки в производство Node Module не работает на Electron с Angular - PullRequest
0 голосов
/ 21 апреля 2020

Я создаю настольное приложение, построенное на Electron с AngularJS. При разработке с использованием npm start этот модуль (epub-gen) работает как задумано и создает файл epub в каталоге. Но после упаковки в производственную сборку выдается следующая ошибка: Error: ENOTDIR, not a directory.

Возможно, это несовместимость с angular или чем-то еще, и мне нужна помощь в исправлении этой ошибки.

Я импортирую модуль узла в сервис angular следующим образом: const epubGen = (<any>window).require('epub-gen');. Это работает перед сборкой для производства и впоследствии завершается неудачей.

Но когда я импортирую модуль следующим образом: import epubGen from 'epub-gen';, он начинает выдавать ту же ошибку еще до того, как его собирают для производства.

Похоже, проблема возникает, когда модуль узла пытается использовать fs.mkdirSync() в своем index.js.

Полный журнал:

Error: ENOTDIR, not a directory
    at createError (electron/js2c/asar.js:116)
    at Object.fs.mkdirSync (electron/js2c/asar.js:686)       <== [Error Location]
    at EPub.generateTempFile (index.js:232)
    at EPub.render (index.js:193)
    at new EPub (index.js:183)
    at LibraryService.<anonymous> (library.service.ts:67)
    at step (home.module.ts:13)
    at Object.next (home.module.ts:13)
    at fulfilled (home.module.ts:13)
    at ZoneDelegate.invoke (zone.js:396)
    at Object.onInvoke (core.js:27465)
    at ZoneDelegate.invoke (zone.js:395)
    at Zone.run (zone.js:153)
    at zone.js:894
    at ZoneDelegate.invokeTask (zone.js:431)
    at Object.onInvokeTask (core.js:27453)
    at ZoneDelegate.invokeTask (zone.js:430)
    at Zone.runTask (zone.js:198)
    at drainMicroTaskQueue (zone.js:611)

Примечание. После сборки в качестве производственного приложения fs изнутри мое приложение Angular может обращаться к файлам и каталогам и создавать их без проблем, но этот модуль не может. Может быть, это потому, что модуль узла делает это извне приложения Angular, и если да, есть ли обходной путь?

Мой package.json

...