在 Electron 应用程序中仅使用 asar 打包某些目录

分享于2022年07月17日 asar electron electron-forge javascript node.js 问答
【问题标题】:在 Electron 应用程序中仅使用 asar 打包某些目录(Package only certain directories with asar in an Electron application)
【发布时间】:2022-05-20 00:23:34
【问题描述】:

我有一个 Electron 应用程序,我正在尝试使用 asar 打包 node_modules 和源目录,不包括其他目录。

我注意到在启用 asar 的情况下构建应用程序时,整个应用程序目录被打包。这并不理想,因为某些可执行文件和 DLL 需要在 asar 文件之外可用。

我尝试过的

目前,我有一个打包源和 node_modules 目录的脚本(使用 asar)。此脚本在 Electron-Forge 构建可执行文件后执行。但是 Electron 似乎不会自动检查 asar 文件中的 source 和 node_module 文件。我收到错误 "Error: Cannot find module index.js" 。这给出了想要的文件结构,但不适用于 Electron(请参阅下面的“文件结构”)。

文件结构

创建可执行文件之前的文件结构:

- node_modules/
- sources/
- executable/
- images/

创建可执行文件后想要的文件结构:

- resource/
   - app/
      - executable/
      - images/
      - sources.asar
      - node_modules.asar

或以下( app.asar 文件应仅包含 sources/ node_modules/ 目录):

- resource/
   - app/
      - executable/
      - images/
   - app.asar

Electron 知道何时使用 asar 文件以及何时直接使用这些文件非常重要。是否可以像这样配置它,或者类似的东西?

问题

有什么方法可以配置 Electron/Electron-Forge 只将某些目录打包到 asar 文件中,而将其他目录复制到 resource/app 目录中?


【解决方案1】:

"build" 部分的 package.json 中添加以下代码:

"build": {
  "asar": true,
  "asarUnpack": [
    "**/thefirstfolder/secondfolder/**/*"
 ],
},

这个 "**/thefirstfolder/secondfolder/**/*" 将解包 secondfolder 的所有子项