@@ -26,7 +26,7 @@ const { spawn } = require('child_process');
26
26
const { inspect } = require ( 'util' ) ;
27
27
const { setTimeout, clearTimeout } = require ( 'timers' ) ;
28
28
const { resolve } = require ( 'path' ) ;
29
- const { once, on } = require ( 'events' ) ;
29
+ const { once } = require ( 'events' ) ;
30
30
31
31
prepareMainThreadExecution ( false , false ) ;
32
32
markBootstrapComplete ( ) ;
@@ -103,27 +103,28 @@ async function stop() {
103
103
clearGraceReport ( ) ;
104
104
}
105
105
106
+ let restarting = false ;
106
107
async function restart ( ) {
107
- if ( ! kPreserveOutput ) process . stdout . write ( clear ) ;
108
- process . stdout . write ( `${ green } Restarting ${ kCommandStr } ${ white } \n` ) ;
109
- await stop ( ) ;
110
- start ( ) ;
111
- }
112
-
113
- ( async ( ) => {
114
- emitExperimentalWarning ( 'Watch mode' ) ;
115
-
108
+ if ( restarting ) return ;
109
+ restarting = true ;
116
110
try {
111
+ if ( ! kPreserveOutput ) process . stdout . write ( clear ) ;
112
+ process . stdout . write ( `${ green } Restarting ${ kCommandStr } ${ white } \n` ) ;
113
+ await stop ( ) ;
117
114
start ( ) ;
115
+ } finally {
116
+ restarting = false ;
117
+ }
118
+ }
118
119
119
- // eslint-disable-next-line no-unused-vars
120
- for await ( const _ of on ( watcher , 'changed' ) ) {
121
- await restart ( ) ;
122
- }
123
- } catch ( error ) {
120
+ emitExperimentalWarning ( 'Watch mode' ) ;
121
+ start ( ) ;
122
+ watcher
123
+ . on ( 'changed' , restart )
124
+ . on ( 'error' , ( error ) => {
125
+ watcher . off ( 'changed' , restart ) ;
124
126
triggerUncaughtException ( error , true /* fromPromise */ ) ;
125
- }
126
- } ) ( ) ;
127
+ } ) ;
127
128
128
129
// Exiting gracefully to avoid stdout/stderr getting written after
129
130
// parent process is killed.
0 commit comments