chore: Electron 主进程脚手架

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
MikiVL 2026-05-05 13:32:43 +08:00
parent 8fe2d2bb88
commit 68f90f4e4c
4 changed files with 6926 additions and 6 deletions

34
electron/main.js Normal file
View File

@ -0,0 +1,34 @@
const { app, BrowserWindow } = require("electron");
const path = require("path");
const isDev = process.env.NODE_ENV === "development";
function createWindow() {
const win = new BrowserWindow({
width: 1200,
height: 800,
webPreferences: {
preload: path.join(__dirname, "preload.js"),
contextIsolation: true,
nodeIntegration: false,
},
});
if (isDev) {
win.loadURL("http://localhost:5173");
win.webContents.openDevTools();
} else {
win.loadFile(path.join(__dirname, "../renderer/dist/index.html"));
}
}
app.whenReady().then(() => {
require("./db/init");
require("./ipc/templateIpc");
require("./ipc/generateIpc");
createWindow();
});
app.on("window-all-closed", () => {
if (process.platform !== "darwin") app.quit();
});

17
electron/preload.js Normal file
View File

@ -0,0 +1,17 @@
const { contextBridge, ipcRenderer } = require("electron");
contextBridge.exposeInMainWorld("api", {
listTemplates: () => ipcRenderer.invoke("template:list"),
saveTemplate: (data) => ipcRenderer.invoke("template:save", data),
updateTemplate: (id, data) => ipcRenderer.invoke("template:update", id, data),
deleteTemplate: (id) => ipcRenderer.invoke("template:delete", id),
parseTemplate: (filePath) => ipcRenderer.invoke("template:parse", filePath),
selectFile: (filters) => ipcRenderer.invoke("file:select", filters),
selectDirectory: () => ipcRenderer.invoke("file:selectDir"),
openDirectory: (dirPath) => ipcRenderer.invoke("file:openDir", dirPath),
copyFileToAppData: (srcPath, templateId) =>
ipcRenderer.invoke("file:copyToAppData", srcPath, templateId),
generate: (req) => ipcRenderer.invoke("generate:run", req),
});

6853
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,28 @@
{
"name": "excel-batch-editor",
"version": "0.1.0",
"description": "Electron desktop app for bulk editing Excel files",
"version": "1.0.0",
"main": "electron/main.js",
"scripts": {
"dev": "electron .",
"build": "electron-builder"
"start": "electron .",
"dev": "concurrently \"npm run dev:renderer\" \"wait-on http://localhost:5173 && electron .\"",
"dev:renderer": "vite --config renderer/vite.config.js",
"build": "vite build --config renderer/vite.config.js && electron-builder",
"test": "cd /Users/mikivl/workspace/excel-batch-editor && python3 -m pytest tests/python/ -v"
},
"dependencies": {},
"devDependencies": {}
"devDependencies": {
"electron": "^28.0.0",
"electron-builder": "^24.9.1",
"concurrently": "^8.2.2",
"wait-on": "^7.2.0",
"vite": "^5.0.0",
"@vitejs/plugin-react": "^4.2.0",
"tailwindcss": "^4.0.0",
"@tailwindcss/vite": "^4.0.0"
},
"dependencies": {
"better-sqlite3": "^11.0.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.22.0"
}
}