'use strict'; process.env.NODE_ENV = 'production'; const { say } = require('cfonts'); const chalk = require('chalk'); const del = require('del'); const { spawn } = require('child_process'); const webpack = require('webpack'); const Multispinner = require('multispinner'); const mainConfig = require('./webpack.main.config'); const rendererConfig = require('./webpack.renderer.config'); const webConfig = require('./webpack.web.config'); const doneLog = chalk.bgGreen.white(' DONE ') + ' '; const errorLog = chalk.bgRed.white(' ERROR ') + ' '; const okayLog = chalk.bgBlue.white(' OKAY ') + ' '; const isCI = process.env.CI || false; if (process.env.BUILD_TARGET === 'clean') clean(); else if (process.env.BUILD_TARGET === 'web') web(); else build(); function clean() { del.sync(['build/*', '!build/icons', '!build/icons/icon.*']); process.exit(); } function build() { greeting(); del.sync(['dist/electron/*', '!.gitkeep']); const tasks = ['main', 'renderer']; const m = new Multispinner(tasks, { preText: 'building', postText: 'process' }); let results = ''; m.on('success', () => { process.stdout.write('\x1B[2J\x1B[0f'); process.exit(); }); pack(mainConfig) .then(result => { results += result + '\n\n'; m.success('main'); }) .catch(err => { m.error('main'); process.exit(1); }); pack(rendererConfig) .then(result => { results += result + '\n\n'; m.success('renderer'); }) .catch(err => { m.error('renderer'); process.exit(1); }); } function pack(config) { return new Promise((resolve, reject) => { webpack(config, (err, stats) => { if (err) reject(err.stack || err); else if (stats.hasErrors()) { let err = ''; stats .toString({ chunks: false, colors: true }) .split(/\r?\n/) .forEach(line => { err += ` ${line}\n`; }); reject(err); } else { resolve( stats.toString({ chunks: false, colors: true }) ); } }); }); } function web() { del.sync(['dist/web/*', '!.gitkeep']); webpack(webConfig, (err, stats) => { if (err || stats.hasErrors()) console.log(err); process.exit(); }); } function greeting() { const cols = process.stdout.columns; let text = ''; if (cols > 85) text = 'lets-build'; else if (cols > 60) text = 'lets-|build'; else text = false; if (text && !isCI) { say(text, { colors: ['yellow'], font: 'simple3d', space: false }); } }