import { app, BrowserWindow } from 'electron'; import * as path from 'path'; import { format as formatUrl } from 'url'; const isDevelopment = process.env.NODE_ENV !== 'production'; // global reference to mainWindow (necessary to prevent window from being garbage collected) let mainWindow: BrowserWindow | null = null; function getIndexURL(): string { if (isDevelopment) { return `http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}`; } return formatUrl({ pathname: path.join(__dirname, 'index.html'), protocol: 'file', slashes: true, }); } function createMainWindow(): BrowserWindow { const window = new BrowserWindow({ webPreferences: { nodeIntegration: true } }); if (isDevelopment) { window.webContents.openDevTools(); } window.loadURL(getIndexURL()); window.on('closed', () => { mainWindow = null; }); window.webContents.on('devtools-opened', () => { window.webContents.focus(); }); return window; } // quit application when all windows are closed app.on('window-all-closed', () => { // on macOS it is common for applications to stay open until the user explicitly quits if (process.platform !== 'darwin') { app.quit(); } }); app.on('activate', () => { // on macOS it is common to re-create a window even after all windows have been closed if (!mainWindow) { mainWindow = createMainWindow(); } }); // create main BrowserWindow when electron is ready app.on('ready', () => { mainWindow = createMainWindow(); });