From 93b3e2142c74954ed74e122203f1a62590ed3db3 Mon Sep 17 00:00:00 2001 From: Josh Kim Date: Wed, 26 Jun 2024 02:04:55 -0700 Subject: [PATCH] fix(module-federation): module-federation-dev-server hang caused by child process exiting too early (#26684) (#26685) ## Current Behavior See #26684 ## Expected Behavior See #26684 Fixes #26684 --- This fix is targeted at NX 19. For a backport to NX 18, a small, trivial change is necessary. I will file another PR targeting NX 18. --------- Co-authored-by: Colum Ferry --- .../module-federation-dev-server/lib/build-static-remotes.ts | 5 ++++- .../module-federation-dev-server.impl.ts | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/angular/src/executors/module-federation-dev-server/lib/build-static-remotes.ts b/packages/angular/src/executors/module-federation-dev-server/lib/build-static-remotes.ts index feb82ad16e..e8e4cb8a1e 100644 --- a/packages/angular/src/executors/module-federation-dev-server/lib/build-static-remotes.ts +++ b/packages/angular/src/executors/module-federation-dev-server/lib/build-static-remotes.ts @@ -67,13 +67,16 @@ export async function buildStaticRemotes( } }); staticProcess.stderr.on('data', (data) => logger.info(data.toString())); - staticProcess.on('exit', (code) => { + staticProcess.once('exit', (code) => { stdoutStream.end(); + staticProcess.stdout.removeAllListeners('data'); + staticProcess.stderr.removeAllListeners('data'); if (code !== 0) { throw new Error( `Remote failed to start. A complete log can be found in: ${remoteBuildLogFile}` ); } + res(); }); process.on('SIGTERM', () => staticProcess.kill('SIGTERM')); process.on('exit', () => staticProcess.kill('SIGTERM')); diff --git a/packages/react/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts b/packages/react/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts index c152e50b3d..11542dc6e1 100644 --- a/packages/react/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts +++ b/packages/react/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts @@ -224,13 +224,16 @@ async function buildStaticRemotes( } }); staticProcess.stderr.on('data', (data) => logger.info(data.toString())); - staticProcess.on('exit', (code) => { + staticProcess.once('exit', (code) => { stdoutStream.end(); + staticProcess.stdout.removeAllListeners('data'); + staticProcess.stderr.removeAllListeners('data'); if (code !== 0) { throw new Error( `Remote failed to start. A complete log can be found in: ${remoteBuildLogFile}` ); } + res(); }); process.on('SIGTERM', () => staticProcess.kill('SIGTERM')); process.on('exit', () => staticProcess.kill('SIGTERM'));