diff --git a/src/api/dev.ts b/src/api/dev.ts index fb356c8..adfd73a 100644 --- a/src/api/dev.ts +++ b/src/api/dev.ts @@ -199,9 +199,10 @@ class Watcher extends EventEmitter { }); manifest_data = new_manifest_data; - } catch (err) { + } catch (error) { this.emit('error', { - message: err.message + type: 'manifest', + error }); } } @@ -408,11 +409,11 @@ class Watcher extends EventEmitter { }) { compiler.oninvalid(invalid); - compiler.watch((err?: Error, result?: CompileResult) => { - if (err) { + compiler.watch((error?: Error, result?: CompileResult) => { + if (error) { this.emit('error', { type: name, - message: err.message + error }); } else { this.emit('build', { diff --git a/src/cli.ts b/src/cli.ts index 64b3b33..c8687a3 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -89,8 +89,17 @@ prog.command('dev') }); watcher.on('error', (event: ErrorEvent) => { - console.log(colors.red(`✗ ${event.type}`)); - console.log(colors.red(event.message)); + const { type, error } = event; + + console.log(colors.bold().red(`✗ ${type}`)); + + if (error.loc) { + let file = error.loc.file && `${path.relative(process.cwd(), error.loc.file)} (${error.loc.line}:${error.loc.column})`; + if (file) console.log(colors.bold(file)); + } + + console.log(colors.red(event.error.message)); + if (error.frame) console.log(error.frame); }); watcher.on('fatal', (event: FatalEvent) => { diff --git a/src/interfaces.ts b/src/interfaces.ts index 8b2f377..f768100 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -69,7 +69,7 @@ export type ReadyEvent = { export type ErrorEvent = { type: string; - message: string; + error: Error; }; export type FatalEvent = {