如何将 ES 用户模块(用于渲染器进程)导入 Electron 主进程
How can I import ES user modules (used in renderer process) into Electron main process
https://github.com/Jazzepi/bunny-tracker
我正在为一家非营利组织 Ohio House Rabbit Rescue 开发一个小型本地化数据库(他们很棒),我正在为 Electron 应用程序的部署版本而苦苦挣扎。
当我将消息从渲染器传递到主进程时,我经常传递整个 Typescript 对象。我想在主流程中使用这些 Typescript 定义,而无需手动复制它们。您可以在此处查看这些导入。来自以 ./src/
开头的导入的任何内容都来自 ES "user" 模块。
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。
https://github.com/electron/electron/issues/12011
https://gist.github.com/smotaal/f1e6dbb5c0420bfd585874bd29f11c43
任何帮助回答甚至只是引导我朝着正确的方向前进都会很棒!如果我无法解决这个问题,我的解决方案是将用户导入的模块符号链接到 space 主处理器实际上可以从中导入。
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"
],
https://github.com/Jazzepi/bunny-tracker
我正在为一家非营利组织 Ohio House Rabbit Rescue 开发一个小型本地化数据库(他们很棒),我正在为 Electron 应用程序的部署版本而苦苦挣扎。
当我将消息从渲染器传递到主进程时,我经常传递整个 Typescript 对象。我想在主流程中使用这些 Typescript 定义,而无需手动复制它们。您可以在此处查看这些导入。来自以 ./src/
开头的导入的任何内容都来自 ES "user" 模块。
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。
任何帮助回答甚至只是引导我朝着正确的方向前进都会很棒!如果我无法解决这个问题,我的解决方案是将用户导入的模块符号链接到 space 主处理器实际上可以从中导入。
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"
],