2

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

const workerThread = new SharedWorker(path.join(__dirname, "JS/JS_MainWindow/worker.js"));

我对可能导致这种情况的原因感到非常困惑,但可能是应用程序被打包到 ASAR 文件夹中吗?我非常有信心加载工作文件的路径正确,因为我正在加载其他几个具有相同路径的图像。

4

2 回答 2

4

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

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

因为工作线程在普通节点进程中运行,而不是在修补的电子节点进程中运行,所以工作线程无法使用 ASAR 存档内的路径解析 require() 语句。

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

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

于 2021-03-30T07:00:59.197 回答
0

所以这个错误是由我在工作线程中需要的某个模块引起的。出于某种原因,此特定模块在打包后不起作用。路径确实正确,工作人员显然使用与打包前“相同”的路径进行打包后工作(例如:“C:\FOD\FOD-JS\fodGUI-win32 -x64\resources\app.asar\src\JS\JS_MainWindow\worker.js")。

于 2019-12-09T20:29:56.303 回答