我正在电子应用程序中进行长时间运行的计算。我正在使用child_process.fork“分叉”节点进程,以在单独的进程中执行脚本,而不是阻止渲染器进程。
如果我使用 child_process.fork 启动的脚本位于要从其启动的目录中,则该应用程序运行良好。相反,我想将脚本运送到二进制文件中(我使用electron-builder来构建脚本)。
我发现该构建器将所有内容(包括我感兴趣的脚本)打包到.asar
存档中-二进制文件可以在运行时对其进行访问吗?
child_process.spawn,也可以选择使用JS以外的语言,但是问题仍然存在-我不知道如何将脚本嵌入二进制文件中。
答案 0 :(得分:2)
多亏了this response from another question,我解决了这个问题。
我添加了
node: {
__dirname: true,
},
转到webpack.config.js
,并使用process.resourcesPath
来解析文件路径。
child_process.fork可以利用asar库(如果在asar归档文件中提供了脚本路径)。为此,我大致使用了
import path from 'path';
import { fork } from 'child_process';
const scriptPath = path.join(process.resourcesPath!, 'app.asar', fileName);
const args = [];
const process = fork(scriptPath, args);
另一方面, child.execFile可以利用asar库生成asar存档中包含的二进制文件的过程。请注意,它只能解析二进制文件,而不能解析其参数,因此,如果要在电子应用程序中嵌入Python解释器和Python脚本,则应将其打包为单个二进制文件或将脚本提取到文件系统中并执行使用嵌入式Python二进制文件或将其内容加载到变量,然后直接使用python -c "print(44)"
并将脚本内容作为-c
参数参数执行。