142 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			142 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | "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 { mains } = require("./setVersion"); | ||
|  | mains(); | ||
|  | 
 | ||
|  | 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) => { | ||
|  |     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); | ||
|  | 
 | ||
|  |     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")); | ||
|  | } |