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 【问题描述】:我正在阅读 electron
和 electron-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 构建的应用程序显示空白屏幕