Files
2024-11-16 17:53:37 +08:00

158 lines
3.9 KiB
JavaScript

"use strict";
process.env.NODE_ENV = "production";
const Multispinner = require("multispinner");
const { say } = require("cfonts");
const chalk = require("chalk");
const del = require("del");
const { spawn } = require("child_process");
const webpack = require("webpack");
const fs = require("fs-extra");
const Listr = require("listr");
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();
}
async function build() {
greeting();
del.sync(["dist/electron/*", "!.gitkeep"]);
fs.copy("lib", "dist/electron/lib", { recursive: true }, () => {});
// fs.copy("src/main/fingerprint", "dist/electron/fingerprint", { recursive: true }, () => {});
const tasks = ["main", "renderer"];
const m = new Multispinner(tasks, {
preText: "building",
postText: "process",
});
let results = "";
const _tasks = new Listr(
[
{
title: "building master process",
task: async () => {
await pack(mainConfig)
.then((result) => {
results += result + "\n\n";
})
.catch((err) => {
console.log(`\n ${errorLog}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 ${errorLog}failed to build renderer process`);
console.error(`\n${err}\n`);
});
},
},
],
{ concurrent: 2 }
);
await _tasks
.run()
.then(() => {
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();
})
.catch((err) => {
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();
}