electron-builder 构建过程中 buildResources 文件夹的目的是啥?

Posted

技术标签:

【中文标题】electron-builder 构建过程中 buildResources 文件夹的目的是啥?【英文标题】:What is the purpose of buildResources folder in electron-builder building process?electron-builder 构建过程中 buildResources 文件夹的目的是什么? 【发布时间】:2019-07-25 12:14:50 【问题描述】:

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

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

buildResources = build String - 构建资源的路径。

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

...构建资源未打包到应用程序中。如果你需要使用一些 文件,例如作为托盘图标,请明确包含所需文件

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

【问题讨论】:

【参考方案1】:

TL;DR:

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

说明:

我也有同样的问题,不幸的是,找到答案并不是很直接。文档条目非常没用。我发现有人在 GitHub issues 上问过这个问题,但一直没有得到答案。

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

// 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 可以包含专门用于构建过程的资产/脚本。这也解释了为什么buildResources 的内容不包含在生成的app.asar 文件中。

【讨论】:

如果您在答案中包含您引用的相应代码 sn-ps,我会将其标记为正确。代码会发生变化,因此链接可能不会长时间保持真实,这就是原因。 @jayarjo 我认为链接指向特定的提交,因此应该始终有效,但我仍然添加了一些代码 sn-ps。谢谢! @KerimGüney 另外,根据文档,如果您想使用多种语言的许可证文件,它们需要位于 buldResources 文件夹中。【参考方案2】:

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

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

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

I.E.

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

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

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

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

这会将文件夹 assets 放入 app 目录中的 build 文件夹中。

【讨论】:

但是文档说 buildResources 中的任何内容都不会自动包含到 asar 文件中?顺便说一句,这也是我在这里观察到的。 感谢您的努力,但这并没有真正解释什么。这也是错误的。 buildResources 文件夹不包含在 asar 文件中。我也不太明白解释“文件”字段的意义何在,顺便说一句,这也是错误的。您是否偶然将两者混为一谈?即便如此,它也不能真正解释 buildResources 的作用。

以上是关于electron-builder 构建过程中 buildResources 文件夹的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在运行的应用程序中查看 electron-builder 的构建目标

使用电子生成器设置电子图标

使用 electron-builder 构建 React-Electron 应用程序,index.js 加载到 pre 标签中

在 electron-forge + webpack 应用程序中使用 electron-builder 构建的应用程序显示空白屏幕

electron-builder - 只为 mac 构建,但设置为构建 mac 并获胜

如何增加由 electron-builder 构建的应用程序的最大内存限制?