Как я могу импортировать пользовательские модули ES (используемые в процессе рендеринга) в основной процесс Electron? - PullRequest
0 голосов
/ 23 октября 2019

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

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

Когда я передаю сообщения от средства визуализации основному процессу, часто я передаю целые объекты 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.

Импорт электронного модуля ES6 https://github.com/electron/electron/issues/12011 https://gist.github.com/smotaal/f1e6dbb5c0420bfd585874bd29f11c43

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

1 Ответ

0 голосов
/ 23 октября 2019

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

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

    "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"
    ],
...