electron-vite/vite-plugin-electron

怎样在dist-electron下生成其他js文件?

mundane799699 opened this issue · 6 comments

electron/main.ts:

ipcMain.handle("query-db", () => {
  return new Promise((resolve, reject) => {
    const worker = new Worker(path.join(__dirname, "worker.js"));
    worker.postMessage("select * from tb_xhs_collect");

    worker.on("message", (result) => {
      if (result.error) {
        reject(result.error);
      } else {
        resolve(result);
      }
      worker.terminate();
    });

    worker.on("error", (error) => {
      reject(error);
      worker.terminate();
    });
  });
});

electron/worker.ts:

import { sqQuery } from "./sqlite";
import { parentPort } from "worker_threads";

parentPort.on("message", async (sql) => {
  try {
    const result = await sqQuery({ sql });
    parentPort.postMessage(result);
  } catch (error) {
    parentPort.postMessage({ error: error.message });
  }
});

启动后调用query-db方法发现报错:Error occurred in handler for 'query-db': Error: Cannot find module 'D:\project\VsCodeProjects\red-archive\dist-electron\worker.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:1055:15)
at Module._load (node:internal/modules/cjs/loader:908:27)
at c._load (node:electron/js2c/node_init:2:13672)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:96:12)
at MessagePort. (node:internal/main/worker_thread:186:26)
at [nodejs.internal.kHybridDispatch] (node:internal/event_target:807:20)
at exports.emitMessage (node:internal/per_context/messageport:23:28) {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
那么怎样才可以让worker.js出现在dist-electron目录下面呢?

我也遇到同样的问题,目前还没有找到解决方案,如果找到了麻烦相互告知下,谢谢

我也遇到同样的问题,目前还没有找到解决方案,如果找到了麻烦相互告知下,谢谢

可以参考下我的这个,希望对你有用。https://github.com/mundane799699/electron-vite-project

我看了你的这个配置是在entry里面引入了文件,
但是我的需求目前是当前我还有一个静态文件keygen.pem文件这个需要如何操作呢

我看了你的这个配置是在entry里面引入了文件, 但是我的需求目前是当前我还有一个静态文件keygen.pem文件这个需要如何操作呢

#110

你可以参考下这个vite插件 https://github.com/think-flow/l4d2addon_installer/blob/main/vite.plugin.modulePath.ts
然后就可以通过添加 "?modulePath" 查询参数来导入你的worker

import workerPath from './worker?modulePath'

ipcMain.handle("query-db", () => {
  return new Promise((resolve, reject) => {
    const worker = new Worker(workerPath);
    ......
  });
});

我看了你的这个配置是在entry里面引入了文件, 但是我的需求目前是当前我还有一个静态文件keygen.pem文件这个需要如何操作呢

keygen.pem 完全可以放到项目根目录,或者建一个 static 目录。记得在 electron-builder.json5 文件的 files 选项中加入一下,这样文件会被收录到构建好的 App 中。在主进程中通过文件相对路径就可以读取 keygen.pem 文件了。