Как я могу импортировать пользовательские модули ES (используемые в процессе рендеринга) в основной процесс Electron

https://github.com/Jazzepi/bunny-tracker

Я работаю над небольшой локализованной базой данных для некоммерческой организации по спасению кроликов в Огайо (они великолепны), и я борюсь с развернутой версией приложения Electron.

Когда я передаю сообщения от средства визуализации основному процессу, я часто передаю целые объекты Typescript. Я хотел бы использовать эти определения Typescript в основном процессе, не копируя их вручную. Вы можете увидеть этот импорт здесь. Все, что происходит из импорта, начинающегося с ./src/, извлекается из «пользовательских» модулей ES.

https://github.com/Jazzepi/bunny-tracker/blob/master/main.ts

import { app, BrowserWindow, ipcMain, Menu, MenuItem, MenuItemConstructorOptions, screen, shell } from 'electron';
import * as path from 'path';
import * as url from 'url';
import * as moment from 'moment';
import Bunny from './src/app/entities/Bunny';
import * as sqlite from 'sqlite';
import { Database } from 'sqlite';
import * as log from 'electron-log';
import SQL from 'sql-template-strings';
import IPC_EVENT from './src/app/ipcEvents';
import GENDER from './src/app/entities/Gender';
import RESCUE_TYPE from './src/app/entities/RescueType';

Ошибка, которую я получаю при запуске готового образа приложения, заключается в следующем. Я получаю это изображение в Linux, используя app-image, и в Mac, используя файл dmg.

ohrr@ohrr:~/repos/bunny-tracker$ release/bunny-tracker-2.0.0-x86_64.AppImage 
A JavaScript error occurred in the main process
Uncaught Exception:
Error: Cannot find module './src/app/ipcEvents'
Require stack:
- /tmp/.mount_bunny-45gwlx/resources/app.asar/main.js
- 
    at Module._resolveFilename (internal/modules/cjs/loader.js:659:15)
    at Function.Module._resolveFilename (/tmp/.mount_bunny-45gwlx/resources/electron.asar/common/reset-search-paths.js:43:12)
    at Function.Module._load (internal/modules/cjs/loader.js:577:27)
    at Module.require (internal/modules/cjs/loader.js:715:19)
    at require (internal/modules/cjs/helpers.js:14:16)
    at Object.<anonymous> (/tmp/.mount_bunny-45gwlx/resources/app.asar/main.js:50:19)
    at Module._compile (internal/modules/cjs/loader.js:808:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:820:10)
    at Module.load (internal/modules/cjs/loader.js:677:32)

В режиме разработки все работает нормально, но не удается найти модули в производственных развертываниях.

Я читал о пользовательских протоколах по приведенным ниже ссылкам, но, похоже, они больше позволяют вам извлекать значения из пользовательских схем URL-адресов, и я хочу import не возиться с HTML.

Импорт модуля Electron ES6 https://github.com/electron/electron/issues/12011 https://gist.github.com/smotaal/f1e6dbb5c0420bfd585874bd29f11c43

Любая помощь с ответом или даже просто направление меня в правильном направлении было бы здорово! Мое решение, если я не могу понять это, - это символическая ссылка на модули, импортированные пользователем, в пространство, из которого главный процессор может фактически импортировать.


person Jazzepi    schedule 23.10.2019    source источник
comment
Если макет каталога вашего проекта является относительно стандартным, пути, включающие src, могут выйти из строя. Я думаю, вам нужно указать "rootDir": "src"   -  person Aluan Haddad    schedule 23.10.2019
comment
Электронный строитель @AluanHaddad исключил src (я думаю), поэтому я собираюсь удалить его из исключения и посмотреть, упаковывает ли он его и работает ли он.   -  person Jazzepi    schedule 23.10.2019
comment
Хорошо, но вы должны использовать rootDir, если вы используете outDir   -  person Aluan Haddad    schedule 23.10.2019
comment
@AluanHaddad Это похоже на директивы веб-пакета? Я не думаю, что использую веб-пакет?   -  person Jazzepi    schedule 23.10.2019
comment
отрицательно, я говорю о tsconfig.json. Я посмотрел ваш проект, и вы указали rootDir   -  person Aluan Haddad    schedule 23.10.2019


Ответы (1)


В electron-builder.json была запись для "!src/", указывающая игнорировать эту папку. Я уверен, что это сделало мой исполняемый файл больше, но мне не нужно упаковывать несколько дополнительных текстовых файлов.

Удаление "!src/", устранило проблему во время выполнения! Ву.

    "files": [
        "**/*",
        "!**/*.ts",
        "!*.code-workspace",
        "!LICENSE.md",
        "!package.json",
        "!package-lock.json",
        "!src/",
        "!e2e/",
        "!hooks/",
        "!angular.json",
        "!_config.yml",
        "!karma.conf.js",
        "!tsconfig.json",
        "!tslint.json"
    ],
person Jazzepi    schedule 23.10.2019