From 99b03cad65311ded19b9f53922f0316522a8bbf9 Mon Sep 17 00:00:00 2001 From: guybedford Date: Tue, 18 Dec 2018 18:41:56 +0200 Subject: [PATCH] polish up watcher errors --- readme.md | 3 ++- src/cli.js | 14 ++++++++++++-- src/index.js | 12 ++++++------ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/readme.md b/readme.md index 51a3711e7..86464a6cc 100644 --- a/readme.md +++ b/readme.md @@ -85,7 +85,8 @@ When `watch: true` is set, the build object is not a promise, but has the follow ```js { // handler re-run on each build completion - handler (({ code, map, assets }) => { ... }) + // watch errors are reported on "err" + handler (({ err, code, map, assets }) => { ... }) // handler re-run on each rebuild start rebuild (() => {}) // close the watcher diff --git a/src/cli.js b/src/cli.js index a2ca06889..1a5da204d 100755 --- a/src/cli.js +++ b/src/cli.js @@ -164,6 +164,7 @@ switch (args._[0]) { errTooManyArguments("build"); let startTime = Date.now(); + let ps; const ncc = require("./index.js")( eval("require.resolve")(resolve(args._[1] || ".")), { @@ -175,7 +176,14 @@ switch (args._[0]) { } ); - async function handler ({ code, map, assets }) { + async function handler ({ err, code, map, assets }) { + // handle watch errors + if (err) { + console.error(err); + console.log('Watching for changes...'); + return; + } + outDir = outDir || resolve("dist"); mkdirp.sync(outDir); // remove all existing ".js" files in the out directory @@ -210,7 +218,7 @@ switch (args._[0]) { } if (run) { - const ps = require("child_process").fork(outDir + "/index.js", { + ps = require("child_process").fork(outDir + "/index.js", { execArgv: map ? ["-r", resolve(__dirname, "sourcemap-register")] : [] @@ -221,6 +229,8 @@ switch (args._[0]) { if (args["--watch"]) { ncc.handler(handler); ncc.rebuild(() => { + if (ps) + ps.kill(); startTime = Date.now(); console.log('File change, rebuilding...'); }); diff --git a/src/index.js b/src/index.js index bc0793458..b200b4381 100644 --- a/src/index.js +++ b/src/index.js @@ -228,9 +228,8 @@ module.exports = ( return new Promise((resolve, reject) => { compiler.run((err, stats) => { if (err) return reject(err); - if (stats.hasErrors()) { + if (stats.hasErrors()) return reject(new Error(stats.toString())); - } resolve(); }); }) @@ -240,14 +239,15 @@ module.exports = ( let cachedResult; watcher = compiler.watch({}, (err, stats) => { if (err) return reject(err); - if (stats.hasErrors()) { - return reject(new Error(stats.toString())); - } + if (err) + return watchHandler({ err }); + if (stats.hasErrors()) + return watchHandler({ err: stats.toString() }); const { code, map, assets } = finalizeHandler(); // clear output file system mfs.data = {}; if (watchHandler) - watchHandler({ code, map, assets }); + watchHandler({ code, map, assets, err: null }); else cachedResult = { code, map, assets}; });