共享工作人员在打包应用程序之前工作,但在打包应用程序之后不工作(电子)

che*_*s46 3 javascript worker-thread electron

我有一个电子应用程序,我试图将一些 CPU 密集型任务推送到工作线程。当我使用启动应用程序时,这效果很好npm start,但是在打包应用程序(使用带有 --asar 的电子打包器)后,工作线程似乎停止工作。我正在加载工作线程,如下所示:

const workerThread = new SharedWorker(path.join(__dirname, "JS/JS_MainWindow/worker.js"));
Run Code Online (Sandbox Code Playgroud)

我很困惑是什么原因导致了这个问题,但有可能是 appl 被打包到 ASAR 文件夹中吗?我非常有信心我有正确的路径来加载工作文件,因为我正在加载具有相同路径的其他几个图像。

小智 5

我的项目还尝试在 Electron 应用程序中进行后台/并行任务处理,我们遇到了同样的问题:后台任务在使用时运行良好,npm run electron-dev但在构建 Windows 安装程序时,应用程序失败并显示错误,指出它不能找到worker JS脚本中引用的模块。

研究完这个问题后,我得出的结论是,Electron 运行在节点的修补版本上,该版本能够识别ASAR 存档(Electron 的存档格式),这使得带有路径的 require() 语句在 ASAR 内的打包/存档环境和开发环境中都能神奇地工作在您的源代码中。

由于工作线程在普通 Node 进程中运行,而不是修补的 Electron 节点进程中,因此工作线程无法使用 ASAR 存档内的路径解析 require() 语句。

我尝试使用asar-node npm 包让我们现有的代码正常工作,但没有成功。

我们的项目目前正在尝试使用一个名为electro-workers的库来完成相同的后台工作任务,但我们遇到了不同的问题(多个工作人员之间没有性能提升,只是在主线程上运行)。