@@ -2,8 +2,10 @@ let path = require("path"); | |||||
let fs = require("fs"); | let fs = require("fs"); | ||||
let glob = require("fast-glob"); | let glob = require("fast-glob"); | ||||
let esbuild = require("esbuild"); | let esbuild = require("esbuild"); | ||||
let html_plugin = require("./esbuild-plugin-html"); | |||||
let vue = require("esbuild-vue"); | let vue = require("esbuild-vue"); | ||||
let cliui = require("cliui")(); | |||||
let chalk = require("chalk"); | |||||
let html_plugin = require("./esbuild-plugin-html"); | |||||
let postCssPlugin = require("esbuild-plugin-postcss2").default; | let postCssPlugin = require("esbuild-plugin-postcss2").default; | ||||
let ignore_assets = require("./ignore-assets"); | let ignore_assets = require("./ignore-assets"); | ||||
let sass_options = require("./sass_options"); | let sass_options = require("./sass_options"); | ||||
@@ -16,7 +18,7 @@ let { | |||||
get_cli_arg | get_cli_arg | ||||
} = require("./utils"); | } = require("./utils"); | ||||
const TOTAL_BUILD_TIME = "Total Build Time"; | |||||
const TOTAL_BUILD_TIME = `${chalk.black.bgGreen(" DONE ")} Total Build Time`; | |||||
const WATCH_MODE = get_cli_arg("watch"); | const WATCH_MODE = get_cli_arg("watch"); | ||||
const NODE_PATHS = [].concat( | const NODE_PATHS = [].concat( | ||||
// node_modules of apps directly importable | // node_modules of apps directly importable | ||||
@@ -30,9 +32,25 @@ const NODE_PATHS = [].concat( | |||||
); | ); | ||||
(async function() { | (async function() { | ||||
let apps = app_list; | |||||
let apps_arg = get_cli_arg("apps"); | |||||
if (apps_arg) { | |||||
apps = apps_arg.split(","); | |||||
} | |||||
console.time(TOTAL_BUILD_TIME); | console.time(TOTAL_BUILD_TIME); | ||||
await build_assets_for_apps(app_list); | |||||
console.timeEnd(TOTAL_BUILD_TIME); | |||||
build_assets_for_apps(apps) | |||||
.then(() => { | |||||
console.timeEnd(TOTAL_BUILD_TIME); | |||||
console.log(); | |||||
if (WATCH_MODE) { | |||||
console.log('Watching for changes...') | |||||
} | |||||
}) | |||||
.catch(() => { | |||||
let error = chalk.white.bgRed(" ERROR "); | |||||
console.error(`${error} There were some problems during build`); | |||||
}); | |||||
})(); | })(); | ||||
function build_assets_for_apps(apps) { | function build_assets_for_apps(apps) { | ||||
@@ -127,8 +145,8 @@ function build_files({ files, outdir }) { | |||||
if (error) | if (error) | ||||
console.error("watch build failed:", error); | console.error("watch build failed:", error); | ||||
else { | else { | ||||
console.log("\n\nwatch build succeeded:"); | |||||
log_build_meta(result.metafile); | |||||
console.log(`${new Date().toLocaleTimeString()}: Compiled changes...`) | |||||
// log_build_meta(result.metafile); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -136,18 +154,66 @@ function build_files({ files, outdir }) { | |||||
}) | }) | ||||
.then(result => { | .then(result => { | ||||
log_build_meta(result.metafile); | log_build_meta(result.metafile); | ||||
}) | |||||
.catch(e => { | |||||
console.error("Error during build"); | |||||
}); | }); | ||||
} | } | ||||
function log_build_meta(metafile) { | function log_build_meta(metafile) { | ||||
let column_widths = [40, 20]; | |||||
cliui.div( | |||||
{ | |||||
text: chalk.cyan.bold("File"), | |||||
width: column_widths[0] | |||||
}, | |||||
{ | |||||
text: chalk.cyan.bold("Size"), | |||||
width: column_widths[1] | |||||
} | |||||
); | |||||
cliui.div(""); | |||||
let output_by_dist_path = {}; | |||||
for (let outfile in metafile.outputs) { | for (let outfile in metafile.outputs) { | ||||
if (outfile.endsWith(".map")) continue; | if (outfile.endsWith(".map")) continue; | ||||
let data = metafile.outputs[outfile]; | let data = metafile.outputs[outfile]; | ||||
outfile = path.resolve(outfile); | outfile = path.resolve(outfile); | ||||
outfile = path.relative(assets_path, outfile); | outfile = path.relative(assets_path, outfile); | ||||
console.log(outfile, data.bytes / 1000 + " Kb"); | |||||
let filename = path.basename(outfile); | |||||
let dist_path = outfile.replace(filename, ""); | |||||
output_by_dist_path[dist_path] = output_by_dist_path[dist_path] || []; | |||||
output_by_dist_path[dist_path].push({ | |||||
name: filename, | |||||
size: (data.bytes / 1000).toFixed(2) + " Kb" | |||||
}); | |||||
} | |||||
for (let dist_path in output_by_dist_path) { | |||||
let files = output_by_dist_path[dist_path]; | |||||
cliui.div({ | |||||
text: dist_path, | |||||
width: column_widths[0] | |||||
}); | |||||
for (let i in files) { | |||||
let file = files[i]; | |||||
let branch = ""; | |||||
if (i < files.length - 1) { | |||||
branch = "├─ "; | |||||
} else { | |||||
branch = "└─ "; | |||||
} | |||||
let color = file.name.endsWith(".js") ? "green" : "blue"; | |||||
cliui.div( | |||||
{ | |||||
text: branch + chalk[color]("" + file.name), | |||||
width: column_widths[0] | |||||
}, | |||||
{ | |||||
text: file.size, | |||||
width: column_widths[1] | |||||
} | |||||
); | |||||
} | |||||
cliui.div(""); | |||||
} | } | ||||
console.log(cliui.toString()); | |||||
} | } |
@@ -97,20 +97,17 @@ function get_apps_list() { | |||||
function get_cli_arg(name) { | function get_cli_arg(name) { | ||||
let args = process.argv.slice(2); | let args = process.argv.slice(2); | ||||
let arg = `--${name}`; | |||||
let index = args.indexOf(arg); | |||||
for (let i in args) { | |||||
let arg = args[i]; | |||||
let value = null; | |||||
if (arg == `--${name}`) { | |||||
value = true; | |||||
} | |||||
if (args[i + 1]) { | |||||
value = args[i + 1]; | |||||
} | |||||
if (value) { | |||||
return value; | |||||
} | |||||
let value = null; | |||||
if (index != -1) { | |||||
value = true; | |||||
} | |||||
if (value && args[index + 1]) { | |||||
value = args[index + 1]; | |||||
} | } | ||||
return value; | |||||
} | } | ||||
module.exports = { | module.exports = { | ||||
@@ -22,6 +22,7 @@ | |||||
"autoprefixer": "^9.8.6", | "autoprefixer": "^9.8.6", | ||||
"awesomplete": "^1.1.5", | "awesomplete": "^1.1.5", | ||||
"bootstrap": "4.5.0", | "bootstrap": "4.5.0", | ||||
"cliui": "^7.0.4", | |||||
"cookie": "^0.4.0", | "cookie": "^0.4.0", | ||||
"cssnano": "^4.1.10", | "cssnano": "^4.1.10", | ||||
"driver.js": "^0.9.8", | "driver.js": "^0.9.8", | ||||
@@ -749,6 +749,13 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: | |||||
dependencies: | dependencies: | ||||
color-convert "^1.9.0" | color-convert "^1.9.0" | ||||
ansi-styles@^4.0.0: | |||||
version "4.3.0" | |||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" | |||||
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== | |||||
dependencies: | |||||
color-convert "^2.0.1" | |||||
ansi-styles@^4.1.0: | ansi-styles@^4.1.0: | ||||
version "4.2.1" | version "4.2.1" | ||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" | ||||
@@ -1524,6 +1531,15 @@ cliui@^5.0.0: | |||||
strip-ansi "^5.2.0" | strip-ansi "^5.2.0" | ||||
wrap-ansi "^5.1.0" | wrap-ansi "^5.1.0" | ||||
cliui@^7.0.4: | |||||
version "7.0.4" | |||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" | |||||
integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== | |||||
dependencies: | |||||
string-width "^4.2.0" | |||||
strip-ansi "^6.0.0" | |||||
wrap-ansi "^7.0.0" | |||||
clone-buffer@^1.0.0: | clone-buffer@^1.0.0: | ||||
version "1.0.0" | version "1.0.0" | ||||
resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" | resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" | ||||
@@ -8431,6 +8447,15 @@ string-width@^4.0.0, string-width@^4.1.0: | |||||
is-fullwidth-code-point "^3.0.0" | is-fullwidth-code-point "^3.0.0" | ||||
strip-ansi "^6.0.0" | strip-ansi "^6.0.0" | ||||
string-width@^4.2.0: | |||||
version "4.2.2" | |||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" | |||||
integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== | |||||
dependencies: | |||||
emoji-regex "^8.0.0" | |||||
is-fullwidth-code-point "^3.0.0" | |||||
strip-ansi "^6.0.0" | |||||
string.prototype.trimend@^1.0.0: | string.prototype.trimend@^1.0.0: | ||||
version "1.0.1" | version "1.0.1" | ||||
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" | ||||
@@ -9383,6 +9408,15 @@ wrap-ansi@^5.1.0: | |||||
string-width "^3.0.0" | string-width "^3.0.0" | ||||
strip-ansi "^5.0.0" | strip-ansi "^5.0.0" | ||||
wrap-ansi@^7.0.0: | |||||
version "7.0.0" | |||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" | |||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== | |||||
dependencies: | |||||
ansi-styles "^4.0.0" | |||||
string-width "^4.1.0" | |||||
strip-ansi "^6.0.0" | |||||
wrappy@1: | wrappy@1: | ||||
version "1.0.2" | version "1.0.2" | ||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" | ||||