From 28dfcfbc5d526d0fc9c791dd0ce00e0946dd58e5 Mon Sep 17 00:00:00 2001 From: Sven Slootweg Date: Sat, 8 May 2021 16:53:22 +0200 Subject: [PATCH] Make more robust against restarts by external watcher, such as nodemon --- operations/development-server.js | 34 +++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/operations/development-server.js b/operations/development-server.js index 0047ae2..41a290c 100644 --- a/operations/development-server.js +++ b/operations/development-server.js @@ -50,8 +50,6 @@ module.exports = function ({ options, staticPath, staticBasePath, entryPaths, ho } let budoOptions = { - watchGlob: staticPath(options.livereloadPattern), - live: options.livereloadPattern, livePort: defaultValue(options.livereloadPort, 35729), stream: defaultValue(options.stream, process.stdout), port: options.port, @@ -61,15 +59,33 @@ module.exports = function ({ options, staticPath, staticBasePath, entryPaths, ho browserify: options.browserify, middleware: middlewareList, debug: defaultValue(options.sourceMaps, true), + verbose: true }; - let devServer = budo(entryPaths, budoOptions).on("connect", (event) => { - let reloadServer = event.webSocketServer; + let devServer = budo(entryPaths, budoOptions) + .watch(staticPath(options.livereloadPattern), { + awaitWriteFinish: { + // NOTE: This is mostly just a hack to make sure that the process has time to get restarted (by eg. nodemon) before sending out a LiveReload update. Need to investigate whether there's a less hacky way to do this. + stabilityThreshold: 130 + } + }) + .live() + .on("watch", (event, file) => { + if (event === "change" || event === "add") { + devServer.reload(file); + } + }) + .on("pending", () => { + // This event is called when the bundle is being regenerated, ie. after watchify has detected a change in the input files + devServer.reload(fullBundlePath); + }) + .on("connect", (event) => { + let reloadServer = event.webSocketServer; - reloadServer.once("connection", (_socket) => { - // This is to make sure the browser also reloads after the process has auto-restarted (eg. using `nodemon`) - console.log("Triggering initial page refresh for new client..."); - devServer.reload("*"); + reloadServer.once("connection", (_socket) => { + // This is to make sure the browser also reloads after the process has auto-restarted (eg. using `nodemon`) + console.log("Triggering initial page refresh for new client..."); + devServer.reload("*"); + }); }); - }); };