// main.js (ESM 版本) import { app, BrowserWindow, Menu, ipcMain } from 'electron'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import { writeLog } from './src/log/log-writer.js'; // -------------- 构造 ESM 版 __dirname -------------- const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); // -------------- 创建窗口 -------------- function createWindow() { const isMac = process.platform === 'darwin'; const win = new BrowserWindow({ show: false, frame: !isMac, titleBarStyle: isMac ? 'hiddenInset' : 'default', webPreferences: { nodeIntegration: true, contextIsolation: false, }, }); // 去掉应用菜单栏 Menu.setApplicationMenu(null); if (!isMac) win.removeMenu(); win.maximize(); // 加载外置 H5 页面 win.loadFile(join(process.cwd(), 'h5/index.html')); win.once('ready-to-show', () => win.show()); //渲染进程死了,纪录日志 win.webContents.on('render-process-gone', (event, details) => { writeLog('error',`渲染进程崩溃 ${details}`); // writeLog('error', JSON.stringify(details)); }); } // -------------- 应用生命周期 -------------- app.whenReady().then(createWindow); app.on('window-all-closed', () => { if (process.platform !== 'darwin') app.quit(); }); app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) createWindow(); }); // -------------- IPC -------------- ipcMain.handle('write-log', async (_, level, msg) => { writeLog(level, msg); });