electron-builder 构建过程中 buildResources 文件夹的用途是什么?

What is the purpose of buildResources folder in electron-builder building process?

我正在阅读 electronelectron-builder 文档,但我仍然不太明白 buildResources 文件夹的用途是什么?

electron-builder 的配置文档是这样说的:

buildResources = build String - The path to build resources.

有点不言自明...但是他们如何或何时参与构建过程,尤其是:

...build resources is not packed into the app. If you need to use some files, e.g. as tray icon, please include required files explicitly

我们能否简单地将这些图标文件放在任意文件夹中,然后手动复制到 app/ 中(因为无论如何我们都需要手动包含 buildResources)?

所以,我要直截了当地说这个选项的文档太糟糕了。

buildResources 中包含的文件将出现在 asar 文件中,您可以在 electron 的网站上找到有关该文件的文档。

选项files 将包含asar 文件中无法访问的文件,例如图片。

I.E.

假设我的构建文件夹中有一个名为 assets 的文件夹,我想将其包含在我的应用程序中。

"files": [
  "./build/**/*"
],
"directories": {
  "buildResources": "assets"
}

这会将 build 中的所有文件夹放入 asar 文件中,然后您可以通过包含解压缩,

"asarUnpack": "**/assets/*"

这会将文件夹资产放入应用程序目录中的构建文件夹中。

TL;DR:

据我快速浏览源代码可以看出,buildResources 文件夹用于保存软件包构建软件可以使用的其他脚本、插件等。 Electron-builder 本身不生成包,它使用像 NSIS 这样的工具。

解释:

我也遇到过同样的问题,不幸的是找到答案不是很简单。文档条目非常无用。我发现有人在 GitHub issues 中询问过它,但从未得到答案。

我决定自己深入研究一下代码,看看它做了什么。在 NsisTargets.ts 中,您可以看到 buildResources 文件夹可以包含自定义包含和 NSIS 的 plugins

// NsisTargets.ts
taskManager.add(async () => {
      const userPluginDir = path.join(packager.info.buildResourcesDir, pluginArch)
      const stat = await statOrNull(userPluginDir)
      if (stat != null && stat.isDirectory()) {
        scriptGenerator.addPluginDir(pluginArch, userPluginDir)
      }
    })

// [...]

taskManager.add(async () => {
        const customInclude = await packager.getResource(this.options.include, "installer.nsh")
        if (customInclude != null) {
          scriptGenerator.addIncludeDir(packager.info.buildResourcesDir)
          scriptGenerator.include(customInclude)
        }
      })

pkg.ts 中,它用于将其他脚本加载到 pkg 生成器:

// pkg.ts
if (options.scripts != null) {
      args.push("--scripts", path.resolve(this.packager.info.buildResourcesDir, options.scripts))
    }

似乎 buildResources 可以包含专门用于构建过程的 assets/scripts。这也解释了为什么 buildResources 的内容没有包含在生成的 app.asar 文件中。