'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.*']) console.log(`\n${doneLog}\n`) 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') console.log(`\n\n${results}`) console.log(`${okayLog}take it away ${chalk.yellow('`electron-builder`')}\n`) process.exit() }) pack(mainConfig).then(result => { results += result + '\n\n' m.success('main') }).catch(err => { m.error('main') console.log(`\n ${errorLog}failed to build main process`) console.error(`\n${err}\n`) process.exit(1) }) pack(rendererConfig).then(result => { results += result + '\n\n' m.success('renderer') }).catch(err => { m.error('renderer') console.log(`\n ${errorLog}failed to build renderer process`) console.error(`\n${err}\n`) process.exit(1) }) } function pack (config) { return new Promise((resolve, reject) => { config.mode = 'production' 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']) webConfig.mode = 'production' webpack(webConfig, (err, stats) => { if (err || stats.hasErrors()) console.log(err) console.log(stats.toString({ chunks: false, colors: true })) 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 }) } else console.log(chalk.yellow.bold('\n lets-build')) console.log() }