预检清单
- 我已阅读了此项目的 Contributing Guidelines。
- 我同意遵循此项目遵循的 Code of Conduct。
- 我在 issue tracker 中搜索了一个与我想提交的功能请求相匹配的特征请求,但没有成功。
问题描述
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 。
1条答案
按热度按时间pbossiut1#
对于nix,我只是在修补应用程序的源代码。