Eh
This commit is contained in:
69
scripts/watch.js
Normal file
69
scripts/watch.js
Normal file
@@ -0,0 +1,69 @@
|
||||
const path = require("path");
|
||||
const chokidar = require("chokidar");
|
||||
const browserSync = require("browser-sync").create();
|
||||
const { build } = require("./build");
|
||||
|
||||
const ROOT_DIR = path.resolve(__dirname, "..");
|
||||
const SOURCE_GLOBS = [
|
||||
path.join(ROOT_DIR, "css/**/*.css"),
|
||||
path.join(ROOT_DIR, "js/**/*.js")
|
||||
];
|
||||
const EXAMPLE_GLOBS = [
|
||||
path.join(ROOT_DIR, "examples/**/*.html")
|
||||
];
|
||||
|
||||
let isBuilding = false;
|
||||
let hasPendingBuild = false;
|
||||
|
||||
async function queueBuild(trigger) {
|
||||
if (isBuilding) {
|
||||
hasPendingBuild = true;
|
||||
return;
|
||||
}
|
||||
|
||||
isBuilding = true;
|
||||
|
||||
try {
|
||||
await build();
|
||||
console.log(`[watch] Built after ${trigger}`);
|
||||
browserSync.reload();
|
||||
} catch (error) {
|
||||
console.error("[watch] Build failed");
|
||||
console.error(error);
|
||||
} finally {
|
||||
isBuilding = false;
|
||||
}
|
||||
|
||||
if (hasPendingBuild) {
|
||||
hasPendingBuild = false;
|
||||
await queueBuild("queued change");
|
||||
}
|
||||
}
|
||||
|
||||
async function start() {
|
||||
await build();
|
||||
|
||||
browserSync.init({
|
||||
server: ROOT_DIR,
|
||||
startPath: "examples/generic.html",
|
||||
notify: false,
|
||||
open: false
|
||||
});
|
||||
|
||||
chokidar.watch(SOURCE_GLOBS, { ignoreInitial: true }).on("all", (event, filePath) => {
|
||||
const relativePath = path.relative(ROOT_DIR, filePath);
|
||||
queueBuild(`${event}: ${relativePath}`);
|
||||
});
|
||||
|
||||
chokidar.watch(EXAMPLE_GLOBS, { ignoreInitial: true }).on("all", () => {
|
||||
browserSync.reload();
|
||||
});
|
||||
|
||||
console.log("[watch] Watching css/, js/, and examples/.");
|
||||
}
|
||||
|
||||
start().catch((error) => {
|
||||
console.error("[watch] Failed to start");
|
||||
console.error(error);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user