Electron Installation
Main Process
Renderer Process
How they Communicate
Preload Script in IPC
Installation
2
Restructure the React Application
import { BrowserWindow, app, ipcMain } from "electron";
import path from "path";
import { fileURLToPath } from "url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
let win;
const createWindow = () => {
win = new BrowserWindow({
width: 800,
height: 600,
});
if (process.env.NODE_ENV === "development") {
win.loadURL("http://localhost:5173");
} else {
win.loadFile(path.join(__dirname, "../../build/renderer/index.html"));
}
};
app.whenReady().then(() => {
createWindow();
app.on("activate", () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
});
app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.quit();
}
});src/
├── main/ # Main process files
│ ├── main.js # Electron Main Process entry
│ └── preload.mjs # Preload script
├── renderer/ # Renderer process files
│ ├── index.html # Entry HTML for the UI
│ └── main.jsx # Main React/JSX entry point
└── ui/ # UI components and styles
├── app.jsx # Main UI component
├── app.css # Styles for the app
└── index.css # Global styles
3
4
Configure package.json to launch electron
package.json to launch electronyarn add concurrently wait-on"type": "module",
"scripts": {
"electron:start": "electron ./src/main/main.js",
"renderer:dev": "vite",
"renderer:build": "vite build",
"renderer:preview": "vite preview",
"dev": "concurrently --kill-others \"yarn renderer:dev\" \"wait-on http://localhost:5173 && cross-env NODE_ENV=development yarn electron:start\"",
},
"main": "./src/main/main.js",Last updated