summaryrefslogtreecommitdiff
path: root/electron/.electron-vue/build.js
diff options
context:
space:
mode:
Diffstat (limited to 'electron/.electron-vue/build.js')
-rw-r--r--electron/.electron-vue/build.js132
1 files changed, 132 insertions, 0 deletions
diff --git a/electron/.electron-vue/build.js b/electron/.electron-vue/build.js
new file mode 100644
index 00000000..2455fbcb
--- /dev/null
+++ b/electron/.electron-vue/build.js
@@ -0,0 +1,132 @@
+'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()
+} \ No newline at end of file