UNPKG

@aubyn/electron-vite

Version:
100 lines (90 loc) 2.62 kB
process.env.NODE_ENV = 'development'; const { spawn } = require('child_process'); const { build: viteBuild, mergeConfig, createServer } = require('vite'); const electron = require('electron'); const chalk = require('chalk'); const { extractRootPackage, getMainConfig, getPreloadConfig, getRendererConfig } = require('../config'); function removeJunk(chunk) { if (/\d+-\d+-\d+ \d+:\d+:\d+\.\d+ Electron(?: Helper)?\[\d+:\d+] /.test(chunk)) { return false; } if (/\[\d+:\d+\/|\d+\.\d+:ERROR:CONSOLE\(\d+\)\]/.test(chunk)) { return false; } if (/ALSA lib [a-z]+\.c:\d+:\([a-z_]+\)/.test(chunk)) { return false; } return chunk; } function electronLog(data, color) { if (data) { let log = ''; data = data.toString().split(/\r?\n/); data.forEach(line => { log += ` ${line}\n`; }); if (/[0-9A-z]+/.test(log)) { console.log(chalk[color].bold(`┏ Electron -------------------`) + '\n\n' + log + chalk[color].bold('┗ ----------------------------') + '\n'); } } } let electronProcess = null, manualRestart = false; function startElectron() { if (electronProcess) { manualRestart = true; electronProcess.kill(); } electronProcess = spawn(electron, ['./dist_electron/bundled'], { env: process.env }); electronProcess.stdout.on('data', data => { electronLog(removeJunk(data), 'blue'); }); electronProcess.stderr.on('data', data => { electronLog(removeJunk(data), 'red'); }); electronProcess.on('close', () => { if (!manualRestart) process.exit(); manualRestart = false; }); } function getBuildWatcher({ name, config, writeBundle }) { config = mergeConfig( { mode: process.env.NODE_ENV, build: { watch: {} }, plugins: [{ name, writeBundle }] }, config ); return viteBuild(config); } async function watchMainFile() { const watcher = await getBuildWatcher({ name: 'main-process', config: await getMainConfig(), writeBundle() { startElectron(); } }); return watcher; } async function watchPreload() { let flag = false; return getBuildWatcher({ name: 'preload', config: await getPreloadConfig(), writeBundle() { flag ? startElectron() : extractRootPackage(); flag = true; } }); } (async () => { const server = await createServer(await getRendererConfig()); const res = await server.listen(); process.env.rendererPort = res.config.server.port; await watchPreload(); await watchMainFile(); })();