const webpack = require("webpack"); const { resolve } = require("path"); const ora = require("ora"); const { spawn } = require("child_process"); const rm = require("rimraf"); const chalk = require("chalk"); const webpackConfig = require("./webpack.config.main.js"); const electron = require("electron"); const spinner = ora("building development electron..."); spinner.start(); let electronProcess = null; let manualRestart = false; const startMain = () => { return new Promise((resolve) => { rm("./dist/main.js", (removeErr) => { if (removeErr) { throw removeErr; } webpackConfig.mode = "development"; const compiler = webpack(webpackConfig); compiler.watch({}, (err, stats) => { if (err) throw err; spinner.stop(); process.stdout.write( stats.toString({ colors: true, modules: false, children: false, chunks: false, chunkModules: false, }) + "\n\n" ); if (stats.hasErrors()) { console.log(chalk.red("Build failed with errors.\n")); process.exit(1); } if (electronProcess && electronProcess.kill) { manualRestart = true; process.kill(electronProcess.pid); electronProcess = null; startElectron(); setTimeout(() => { manualRestart = false; }, 5000); } resolve(); console.log( chalk.cyan( `Build complete development in ${ stats.endTime - stats.startTime }ms.\n` ) ); }); }); }); }; const startElectron = () => { var args = ["--inspect=5858", resolve(__dirname, "../dist/main.js")]; electronProcess = spawn(electron, args); electronProcess.stdout.on("data", (data) => { console.log(chalk.blue(data.toString())); }); electronProcess.stderr.on("data", (data) => { console.log(chalk.blue(data.toString())); }); electronProcess.on("close", () => { if (!manualRestart) process.exit(); }); }; async function init() { try { await startMain(); await startElectron(); } catch (error) { console.error(error); } } init();