electron-vite / vite-plugin-electron

:electron: Electron⚡️Vite core repo
https://github.com/electron-vite
MIT License
628 stars 54 forks source link

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

Open mundane799699 opened 1 month ago

mundane799699 commented 1 month ago

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目录下面呢?

lancemach commented 1 month ago

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

mundane799699 commented 1 month ago

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

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

lancemach commented 1 month ago

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

mundane799699 commented 1 month ago

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

https://github.com/electron-vite/vite-plugin-electron/issues/110

think-flow commented 1 week ago

你可以参考下这个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);
    ......
  });
});