electron **功能请求** :添加一个选项来指定资源目录

rnmwe5a2  于 4个月前  发布在  Electron
关注(0)|答案(1)|浏览(59)

预检清单

问题描述

process.resourcesPath 的值取决于 electron 进程可执行文件的位置:
electron/shell/common/node_bindings.cc
第307行到第311行 in 57d0885
| | auto* command_line = base::CommandLine::ForCurrentProcess(); |
| | base::FilePath exec_path(command_line->GetProgram()); |
| | base::PathService::Get(base::FILE_EXE, &exec_path); |
| | |
| | return exec_path.DirName().Append(FILE_PATH_LITERAL("resources")); |
这使得无法使用符号链接共享单个 electron 二进制文件(例如系统范围内的),因为所有应用程序都将尝试使用相同的资源目录。

建议的解决方案

允许显式指定资源目录的位置(process.resourcesPath),例如使用类似于 --resources-path 的标志,而不是依赖于 electron 二进制文件的位置。这将允许具有不同资源的多个 electron 应用程序使用相同的 electron 二进制文件。

考虑过的其他方案

  • 修补应用程序的源代码以用自定义资源目录替换 process.resourcesPath
  • 在应用程序目录中为 electron 二进制文件创建硬链接,而不是符号链接。

其他信息

我对 Electron 不熟悉,所以不知道提议的想法是否可行。
我目前正在尝试从源代码打包一个 Electron 应用程序到 Nix 生态系统。我尝试使用 Nix 已打包的 Electron 二进制文件(存在于 /nix/store/wrls7fyk1p2x6ab881h00yjldkih72ys-electron-12.1.0/lib/electron/electron)。但问题是 Nix 有只读存储,所以将资源放在 /nix/store/wrls7fyk1p2x6ab881h00yjldkih72ys-electron-12.1.0/lib/electron/resources 上不是一个选项。即使是这样,根据我所了解的,当前的方法也无法让多个使用资源目录的应用程序共享单个 electron 二进制文件。
关于提到的其他方案:

  • 我尝试修补应用程序源代码以添加一行类似 process.resourcesPath = process.env["ELECTRON_RESOURCES_PATH"]; 的内容,但我不知道应该把这一行为放在哪里。我尝试将其添加到入口点文件中,但开发控制台仍然显示旧值。我还尝试将其添加到预加载脚本中,但这也没有起作用。最后,我在使用它之前添加了它。
  • 目前使用硬链接不是一个选项,因为 Nix 派生构建的方式 ^1
pbossiut

pbossiut1#

对于nix,我只是在修补应用程序的源代码。

相关问题