electron-vite-vue项目中Worker线程的正确实现及生产构建运行异常问题求助
electron-vite-vue项目中Worker线程的正确实现及生产构建运行异常问题求助
嘿,各位大佬,我最近在基于electron-vite-vue模板开发的Electron应用里遇到了Worker线程的问题,折腾好一阵没搞定,来求助大家!
情况是这样的:我在主进程的index.ts里需要创建一个Worker线程定时监控磁盘空间,开发模式下直接指定Worker文件路径能正常运行,但打包成生产版本后就找不到Worker文件了。无奈之下我改用eval的方式把Worker代码内嵌进去,开发时没问题,但生产构建后还是不工作。现在想请教下有没有更规范的Worker实现方式,或者怎么让当前的方案在生产环境正常跑起来?
先贴一下我的主进程代码和内嵌的Worker代码:
主进程index.ts关键代码
import cron from "node-cron"; import { app, BrowserWindow } from "electron"; import path, { join } from "node:path"; import Store from "electron-store"; import diskinfo from "node-disk-info"; const store = new Store(); const { Worker } = require('worker_threads'); // 原本的Worker路径写法,开发正常,生产找不到文件 // const workerPath = path.join(__dirname, 'workers/diskSpaceControl.js'); // ... 省略窗口创建等其他代码 ... // 现在用eval方式创建Worker const worker = new Worker(` const Store = require("electron-store"); const diskinfo = require("node-disk-info"); const cron = require("node-cron"); const path = require("path"); const store = new Store(); cron.schedule("* * * * * *", async () => { try { const roamingFolderPath = process.env.APPDATA store.path = path.join(roamingFolderPath,'saber-delivery','config.json') const downloads = await store.get("downloads"); const freeDiskSpace = await store.get("freeDiskSpace"); const result = [] freeDiskSpace.forEach((disk) => { const filteredDownloads = downloads.filter((item) => typeof item.build_size === 'number' && item.downloadedPath.includes(disk.diskPath) ); const total = filteredDownloads.reduce( (acc, item) => acc + (item.build_size - (item.total_done || 0)), 0 ); result.push({ path: disk.diskPath, total: total }); }); const diskSpaceInfo = diskinfo.getDiskInfoSync(); const freeDiskSpaces = diskSpaceInfo .filter((item) => item.filesystem === "Local Fixed Disk") .map((item) => ({ free: item.mounted.includes('C')?item.available - 21474836480:item.available, diskPath: item.mounted })); const res = result.map((item) => { const found = freeDiskSpaces.find((freeDiskSpace) => freeDiskSpace.diskPath.includes(item.path) ); if (found) { return { free: found.free - item.total, diskPath: item.path }; } return { free: 0, diskPath: item.path }; }); store.set("freeDiskSpace", res); } catch (error) { console.log(error); } }); `,{eval:true});
我遇到的核心问题
- 开发环境下直接引用Worker文件路径正常运行,但生产构建后提示找不到Worker文件
- 改用
eval内嵌Worker代码后,开发正常,但生产构建后Worker完全不执行(也没报错信息) - 想知道在electron-vite-vue项目中,主进程创建Node.js Worker线程的正确姿势是什么?或者怎么修复当前的实现?
希望有经验的大佬能指点一二,谢谢啦!
备注:内容来源于stack exchange,提问作者Vahan
相关产品推荐
相关产品推荐

