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

kb5ga3dv  于 12个月前  发布在  Electron
关注(0)|答案(3)|浏览(193)

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

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

字符串
我很困惑什么可能导致这一点,但它可能是appl被打包到一个ASAR文件夹?我很有信心我有正确的路径加载工人文件,因为我正在加载其他几个图像与相同的路径.

g0czyy6m

g0czyy6m1#

我的项目也试图从Electron应用程序中进行后台/并行任务处理,我们遇到了同样的问题:当使用npm run electron-dev运行时,后台任务运行良好,但当构建Windows安装程序时,应用程序失败,错误说它找不到工人JS脚本中引用的模块。
在研究了这个问题之后,我得出结论,Electron运行在一个补丁版本的node上,它知道ASAR archives (Electron's archive format),使得带有路径的require()语句在ASAR内的打包/归档环境和源代码中的开发环境中都能神奇地工作。
因为工作线程运行在普通节点进程中,而不是打补丁的电子节点进程中,所以工作线程无法解析带有ASAR归档内路径的require()语句。
我尝试使用asar-node npm package使我们现有的代码工作,但没有成功。
我们的项目目前正在尝试使用一个名为electron-workers的库来完成相同的后台工作任务,我们遇到了不同的问题(多个工作线程之间没有性能提升,并且只在主线程上运行)。

pgpifvop

pgpifvop2#

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

taor4pac

taor4pac3#

我的电子应用程序也有类似的问题。在用asar true打包应用程序后,workerpool脚本再也找不到节点模块了。一个快速的解决方案是将node_modules文件夹复制到打包的应用程序目录中。这样,workerpool线程就可以访问节点模块。这不是一个很好的解决方案。因为我们将在文件夹中打包节点模块两次,增加了应用程序的大小。但对我来说很有效。可能单独添加节点模块,而不是打包在asar中可能会更好。我会尝试一下,如果我得到任何更新,我会发布问题.

相关问题