devPlugin.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { ViteDevServer } from "vite";
  2. export let devPlugin = () => {
  3. return {
  4. name: "dev-plugin",
  5. configureServer(server: ViteDevServer) {
  6. require("esbuild").buildSync({
  7. entryPoints: ["./src/main/mainEntry.ts"],
  8. bundle: true,
  9. platform: "node",
  10. outfile: "./dist/mainEntry.js",
  11. external: ["electron", "pg", "tedious", "mysql", "mysql2", "oracledb", "pg-query-stream", "sqlite3"],
  12. });
  13. // require("esbuild").buildSync({
  14. // entryPoints: ["./src/main/preload.ts"],
  15. // bundle: true,
  16. // platform: "node",
  17. // outfile: "./dist/preload.js",
  18. // external: ["electron", "pg", "tedious", "mysql", "mysql2", "oracledb", "pg-query-stream", "sqlite3"],
  19. // });
  20. if (!server.httpServer) throw new Error("server.httpServer is null check devPlugin.ts ");
  21. server.httpServer?.once("listening", () => {
  22. let { spawn } = require("child_process");
  23. let addressInfo = server.httpServer?.address() as any;
  24. // console.log(server);
  25. // console.log(addressInfo);
  26. let httpAddress = `http://${addressInfo.address}:${addressInfo.port}`;
  27. let electronProcess = spawn(require("electron").toString(), ["./dist/mainEntry.js", httpAddress], {
  28. cwd: process.cwd(),
  29. stdio: "inherit",
  30. });
  31. electronProcess.on("close", () => {
  32. server.close();
  33. process.exit();
  34. });
  35. });
  36. },
  37. };
  38. };
  39. export let getReplacer = () => {
  40. let externalModels = ["os", "fs", "path", "events", "child_process", "crypto", "http", "buffer", "url", "better-sqlite3", "knex"];
  41. let result = {};
  42. for (let item of externalModels) {
  43. result[item] = () => ({
  44. find: new RegExp(`^${item}$`),
  45. code: `const ${item} = require('${item}');export { ${item} as default }`,
  46. });
  47. }
  48. result["electron"] = () => {
  49. let electronModules = ["clipboard", "ipcRenderer", "nativeImage", "shell", "webFrame"].join(",");
  50. return {
  51. find: new RegExp(`^electron$`),
  52. code: `const {${electronModules}} = require('electron');export {${electronModules}}`,
  53. };
  54. };
  55. return result;
  56. };