电子建造器建造过程中的buildResources文件夹的目的是什么?

时间:2019-03-04 08:02:15

标签: electron electron-builder buildresources

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

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

  

buildResources =构建 字符串-构建资源的路径。

一种不言自明的方法……但是他们如何或何时参与构建过程,尤其是具有以下内容:

  

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

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

2 个答案:

答案 0 :(得分:5)

TL; DR:

据我快速浏览一下源代码,buildResources文件夹用于存放可由软件包构建软件使用的其他脚本,插件等。 Electron-builder不会自行生成软件包,而是使用NSIS之类的工具。

说明:

我遇到了同样的问题,不幸的是,这并不是很简单的答案。 docs条目非常没用。我发现有人在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可以包含专门用于构建过程的资产/脚本。这也解释了为什么buildResources的内容未包含在生成的app.asar文件中。

答案 1 :(得分:0)

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

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

选项files将包含诸如asar文件中不可访问的图片之类的文件。

IE。

假设我要在应用程序中包含的构建文件夹中有一个名为Assets的文件夹。

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

这会将构建中的所有文件夹放入asar文件,然后您可以通过将其包含在内来解压缩

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

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