@aubyn/electron-vite
Version:
100 lines (90 loc) • 2.62 kB
JavaScript
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();
})();