electron-userland / electron-compile

DEPRECATED: Electron supporting package to compile JS and CSS in Electron applications
1.01k stars 99 forks source link

ENOENT stops watcher #227

Open fasterthanlime opened 7 years ago

fasterthanlime commented 7 years ago

If by mistake, a file:/// url is requested, and it points to a non-existent file, the watcher will crash and not recover:

Fri, 28 Apr 2017 11:18:24 GMT electron-compile:protocol-hook Failed to compile C:/msys64/home/amwenger/Dev/itch/src/components/static/images/logos/app-white.svg: watch C:/msys64/home/amwenger/Dev/itch/src/components/static/images/logos/app-white.svg ENOENT
Error: watch C:/msys64/home/amwenger/Dev/itch/src/components/static/images/logos/app-white.svg ENOENT
    at exports._errnoException (util.js:1022:11)
    at FSWatcher.start (fs.js:1316:19)
    at Object.fs.watch (fs.js:1341:11)
    at Observable._Observable.Observable.create.subj [as _subscribe] (C:\msys64\home\amwenger\Dev\itch\node_modu
les\electron-compile\src\pathwatcher-rx.js:12:24)
    at Observable._trySubscribe (C:\msys64\home\amwenger\Dev\itch\node_modules\rxjs\src\Observable.ts:113:19)
    at Observable.subscribe (C:\msys64\home\amwenger\Dev\itch\node_modules\rxjs\src\Observable.ts:98:21)
    at Observable.ConnectableObservable.connect (C:\msys64\home\amwenger\Dev\itch\node_modules\rxjs\src\observab
le\ConnectableObservable.ts:38:10)
    at RefCountOperator.call (C:\msys64\home\amwenger\Dev\itch\node_modules\rxjs\src\observable\ConnectableObser
vable.ts:105:51)
    at Observable.subscribe (C:\msys64\home\amwenger\Dev\itch\node_modules\rxjs\src\Observable.ts:96:16)
    at MapOperator.call (C:\msys64\home\amwenger\Dev\itch\node_modules\rxjs\src\operator\map.ts:50:19)
    at Observable.subscribe (C:\msys64\home\amwenger\Dev\itch\node_modules\rxjs\src\Observable.ts:96:16)
    at Object.subscribeToResult (C:\msys64\home\amwenger\Dev\itch\node_modules\rxjs\src\util\subscribeToResult.t
s:33:21)
    at MergeMapSubscriber._innerSub (C:\msys64\home\amwenger\Dev\itch\node_modules\rxjs\src\operator\mergeMap.ts
:135:14)
    at MergeMapSubscriber._tryNext (C:\msys64\home\amwenger\Dev\itch\node_modules\rxjs\src\operator\mergeMap.ts:
131:10)
    at MergeMapSubscriber._next (C:\msys64\home\amwenger\Dev\itch\node_modules\rxjs\src\operator\mergeMap.ts:115
:12)
    at MergeMapSubscriber.Subscriber.next (C:\msys64\home\amwenger\Dev\itch\node_modules\rxjs\src\Subscriber.ts:
95:12)

Expected behavior: throw a 404, sure, but keep watching so that when the error is fixed, HMR can pick up the changes.

fasterthanlime commented 7 years ago

It seems relatively trivial to add a try/catch to https://github.com/electron/electron-compile/blob/master/src/pathwatcher-rx.js but I'm a bit confused by the rxjs/Observable logic so it's probably best fixed internally instead of me opening a wonky PR :)