Files
gdt-tool/_runner/build/build.mjs
T

101 lines
2.3 KiB
JavaScript

import './env.mjs'
import chalk from 'chalk'
import webpack from 'webpack'
import Listr from 'listr'
import { performance } from 'perf_hooks'
import _ from 'qsu'
import FsMan from 'fsman'
import mainConfig from '../config/webpack.main.mjs'
import rendererConfig from '../config/webpack.renderer.mjs'
const TAG_ERROR = `${chalk.bgRed.white(' ERROR ')} `
const TAG_SUCCESS = `${chalk.bgGreen.black(' SUCCESS ')} `
async function build () {
FsMan.empty('dist/electron')
let results = ''
const tasks = new Listr(
[
{
title: 'building main process',
task: async () => {
await pack(mainConfig)
.then(result => {
results += result + '\n\n'
})
.catch(err => {
console.log(`\n ${TAG_ERROR}failed to build main process`)
console.error(`\n${err}\n`)
})
}
},
{
title: 'building renderer process',
task: async () => {
await pack(rendererConfig)
.then(result => {
results += result + '\n\n'
})
.catch(err => {
console.log(`\n ${TAG_ERROR}failed to build renderer process`)
console.error(`\n${err}\n`)
})
}
}
],
{
concurrent: 2
}
)
await tasks.run()
.catch(() => {
process.exit(1)
})
process.stdout.write('\x1B[2J\x1B[0f')
console.log(`
\n\n${results}
${TAG_SUCCESS}Wait for ${chalk.greenBright('`electron-builder`')} process...
${TAG_SUCCESS}${chalk.yellowBright(`Webpack Build Time: ${_.msToTime(performance.now())}`)}\n
`)
process.exit()
}
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
}))
}
})
})
}
(async () => {
performance.now()
await build()
})()