From d419d7a9b07463209ddbf2d9a028e2f5175b8cd3 Mon Sep 17 00:00:00 2001 From: Kuba Orlik Date: Mon, 1 Aug 2022 20:41:55 +0200 Subject: [PATCH] More resilient esbuild --- esbuild.js | 70 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/esbuild.js b/esbuild.js index 2f0c7dc..99f1a17 100644 --- a/esbuild.js +++ b/esbuild.js @@ -6,6 +6,45 @@ const chokidar = require("chokidar"); const watch = process.argv.includes("--watch"); +async function build_scss(watch) { + let scss_build; + if (watch) { + const scss_watcher = chokidar.watch("src", { ignoreInitial: true }); + scss_watcher.on("all", (_, path) => { + if (!scss_build) return; + if (path.endsWith(".scss") && !path.endsWith("/includes.scss")) { + // refresh the list of all scss files in includes.scss + spawn("./node_modules/.bin/sealgen", ["generate-scss-includes"]).on( + "close", + () => { + try { + scss_build.rebuild(); + console.log(`Built main.scss [on ${path}]`); + } catch (e) { + console.error(e); + setTimeout(() => { + scss_build + .rebuild() + .catch((e) => conslole.error(e.message)); + }, 200); + } + } + ); + } + }); + } + + scss_build = await build({ + entryPoints: ["./src/main.scss"], + sourcemap: true, + outfile: "./public/dist/style.css", + logLevel: "info", + incremental: watch, + plugins: [sassPlugin()], + }); + scss_build.rebuild(); +} + (async () => { const entryPoints = await glob("./src/back/**/*.ts"); build({ @@ -18,15 +57,6 @@ const watch = process.argv.includes("--watch"); target: "node16", format: "cjs", }); - const scss_build = await build({ - entryPoints: ["./src/main.scss"], - sourcemap: true, - outfile: "./public/dist/style.css", - logLevel: "info", - incremental: watch, - plugins: [sassPlugin()], - }); - scss_build.rebuild(); build({ entryPoints: ["./src/front/index.ts"], @@ -37,23 +67,9 @@ const watch = process.argv.includes("--watch"); watch, }); - if (watch) { - const scss_watcher = chokidar.watch("src", { ignoreInitial: true }); - scss_watcher.on("all", (_, path) => { - if (path.endsWith(".scss")) { - // refresh the list of all scss files in includes.scss - spawn("./node_modules/.bin/sealgen", ["generate-scss-includes"]).on( - "close", - () => { - scss_build.rebuild().catch(async (e) => { - console.error(e); - setTimeout(() => { - scss_build.rebuild(); - }, 200); - }); - } - ); - } - }); + try { + await build_scss(watch); + } catch (e) { + console.error(e.message); } })();