summaryrefslogtreecommitdiff
path: root/scripts/cmd/build.js
diff options
context:
space:
mode:
authorGravatar Drew Powers <1369770+drwpow@users.noreply.github.com> 2021-05-01 10:09:23 -0600
committerGravatar GitHub <noreply@github.com> 2021-05-01 11:09:23 -0500
commit467820996f71b0c78f2000294cb6f3c0a8f3aca4 (patch)
treea796efd8436d20051e18fb4500ac29147451632d /scripts/cmd/build.js
parent7c4efe2a7ed3cd57ef28b10c2fd47fd94d8df242 (diff)
downloadastro-467820996f71b0c78f2000294cb6f3c0a8f3aca4.tar.gz
astro-467820996f71b0c78f2000294cb6f3c0a8f3aca4.tar.zst
astro-467820996f71b0c78f2000294cb6f3c0a8f3aca4.zip
Improve esbuild watch mode (#160)
Diffstat (limited to 'scripts/cmd/build.js')
-rw-r--r--scripts/cmd/build.js87
1 files changed, 49 insertions, 38 deletions
diff --git a/scripts/cmd/build.js b/scripts/cmd/build.js
index 5f7d6112d..ea112f018 100644
--- a/scripts/cmd/build.js
+++ b/scripts/cmd/build.js
@@ -1,54 +1,65 @@
import esbuild from 'esbuild';
import del from 'del';
import { promises as fs } from 'fs';
-import { resolve } from 'path';
+import { dim, green, red, yellow } from 'kleur/colors';
import glob from 'tiny-glob';
/** @type {import('esbuild').BuildOptions} */
const config = {
- bundle: true,
- minify: true,
- sourcemap: 'inline',
- format: 'esm',
- platform: 'node',
- target: 'node14'
-}
+ bundle: true,
+ minify: true,
+ sourcemap: 'inline',
+ format: 'esm',
+ platform: 'node',
+ target: 'node14',
+};
export default async function build(pattern, ...args) {
- const isDev = args.pop() === 'IS_DEV';
- const entryPoints = await glob(pattern, { filesOnly: true, absolute: true });
- const { type = 'module', dependencies = {} } = await fs.readFile('./package.json').then(res => JSON.parse(res.toString()));
- const format = type === 'module' ? 'esm' : 'cjs';
- const external = Object.keys(dependencies);
- const outdir = 'dist';
- await clean(outdir);
-
- if (!isDev) {
- await esbuild.build({
- ...config,
- entryPoints,
- outdir,
- external,
- format
- });
- return;
- }
+ const isDev = args.pop() === 'IS_DEV';
+ const entryPoints = await glob(pattern, { filesOnly: true, absolute: true });
+ const { type = 'module', dependencies = {} } = await fs.readFile('./package.json').then((res) => JSON.parse(res.toString()));
+ const format = type === 'module' ? 'esm' : 'cjs';
+ const external = Object.keys(dependencies);
+ const outdir = 'dist';
+ await clean(outdir);
- const builder = await esbuild.build({
- ...config,
- watch: true,
- entryPoints,
- outdir,
- external,
- format
+ if (!isDev) {
+ await esbuild.build({
+ ...config,
+ entryPoints,
+ outdir,
+ external,
+ format,
});
+ return;
+ }
+
+ const builder = await esbuild.build({
+ ...config,
+ watch: {
+ onRebuild(error, result) {
+ const date = new Date().toISOString();
+ if (error || (result && result.errors.length)) {
+ console.error(dim(`[${date}] `) + red(error || result.errors.join('\n')));
+ } else {
+ if (result.warnings.length) {
+ console.log(dim(`[${date}] `) + yellow('⚠ updated with warnings:\n' + result.warnings.join('\n')));
+ }
+ console.log(dim(`[${date}] `) + green('✔ updated'));
+ }
+ },
+ },
+ entryPoints,
+ outdir,
+ external,
+ format,
+ });
- process.on('beforeExit', () => {
- builder.stop?.();
- })
-
+ process.on('beforeExit', () => {
+ builder.stop?.();
+ });
}
async function clean(outdir) {
- return del(`!${outdir}/**/*.d.ts`);
+ return del(`!${outdir}/**/*.d.ts`);
}