将 Electron 应用程序打包到 ASAR 中会导致找不到模块错误

Posted

技术标签:

【中文标题】将 Electron 应用程序打包到 ASAR 中会导致找不到模块错误【英文标题】:Packaging Electron app into ASAR causes module not found error 【发布时间】:2019-10-17 19:16:11 【问题描述】:

我在将我的应用程序打包成单个 .asar 文件时遇到问题。我正在使用electron-builder 来启动.asarfile 的打包。如果我不将应用程序打包到 asar 中,如果我解压缩生成的 asar,它会按预期工作,它也会按预期工作。

但是,使用 asar 运行电子会产生此错误:

Error: Cannot find module './MyModuleBase' at Module._resolveFilename (internal/modules/cjs/loader.js:584:15)

以前,asar 可以正常工作,但我们在项目中进行了一些重构,将代码拆分为一个新模块。

**初始配置(ASAR 工作)**

+--electron-application
  +--application

electron-application 依赖于 application 模块。

**新配置(ASAR 损坏)**

+--electron-application
  +--application
    +--application-core

electron-application 依赖于application 模块,application 依赖于application-core MyModuleBase 在 application-core 模块中

可能相关的另一点:应用程序正在使用 webpack-stream 模块与 web-pack 打包。

更新:我已经解决了这个问题,但是我仍然想知道为什么 .asar 版本会失败并且提取文件会起作用。

【问题讨论】:

【参考方案1】:

在进一步深入研究之后,问题的根本原因似乎在更上游。主进程引用了application 中的一个类,但是主进程没有被 webpacked。该课程已移至主课程,现在一切正常。看来 Electron 应用程序能够解析处于未打包状态的文件,但不能解析打包状态的文件。

【讨论】:

以上是关于将 Electron 应用程序打包到 ASAR 中会导致找不到模块错误的主要内容,如果未能解决你的问题,请参考以下文章

Electron 应用打包

asar 如何解密加密?electron 的 asar 的具体用法

Electron:无法加载预加载脚本:Resources/app.asar/src/preload.js

如何解压 .asar 文件?

在 ElectronJS (asar) 中编写 JSON 文件

electron 大体结构