@@ -26,7 +26,7 @@ const { spawn } = require('child_process');
2626const { inspect } = require ( 'util' ) ;
2727const { setTimeout, clearTimeout } = require ( 'timers' ) ;
2828const { resolve } = require ( 'path' ) ;
29- const { once, on } = require ( 'events' ) ;
29+ const { once } = require ( 'events' ) ;
3030
3131prepareMainThreadExecution ( false , false ) ;
3232markBootstrapComplete ( ) ;
@@ -103,27 +103,28 @@ async function stop() {
103103 clearGraceReport ( ) ;
104104}
105105
106+ let restarting = false ;
106107async 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 ;
116110 try {
111+ if ( ! kPreserveOutput ) process . stdout . write ( clear ) ;
112+ process . stdout . write ( `${ green } Restarting ${ kCommandStr } ${ white } \n` ) ;
113+ await stop ( ) ;
117114 start ( ) ;
115+ } finally {
116+ restarting = false ;
117+ }
118+ }
118119
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 ) ;
124126 triggerUncaughtException ( error , true /* fromPromise */ ) ;
125- }
126- } ) ( ) ;
127+ } ) ;
127128
128129// Exiting gracefully to avoid stdout/stderr getting written after
129130// parent process is killed.
0 commit comments