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(); });