如何将ES用户模块(在渲染器过程中使用)导入到Electron主过程中

时间:2019-10-23 16:10:20

标签: typescript ecmascript-6 electron ecma

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 module import https://github.com/electron/electron/issues/12011 https://gist.github.com/smotaal/f1e6dbb5c0420bfd585874bd29f11c43

任何答案的帮助,甚至只是引导我朝着正确的方向前进,都是很棒的!如果无法解决,我的解决方案是将用户导入的模块符号链接到主处理器实际上可以从中导入的空间。

1 个答案:

答案 0 :(得分:0)

i包含“!src /”条目,告诉它忽略该文件夹。我确定这会使我的可执行文件更大,但是我不在乎打包一些额外的文本文件。

删除electron-builder.json解决了生产运行时问题!哇!

"!src/",