From 4e1bd0decd8afe545ace9202073168ec21dade17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Mon, 5 Jul 2021 14:27:02 +0300 Subject: [PATCH 1/2] fix(angular): Quit process after finishing a static build I don't understand why `process.exit` is needed for this particular case but it seems to fix the issue. In order to be more safe, I also added a `try`/`catch` and in my own testing that caught a ngcc locking issue I would have missed otherwise. Closes #15227. --- app/angular/src/server/build.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/angular/src/server/build.ts b/app/angular/src/server/build.ts index d8abf06a4396..54d61f8c6318 100644 --- a/app/angular/src/server/build.ts +++ b/app/angular/src/server/build.ts @@ -1,4 +1,16 @@ import { buildStatic } from '@storybook/core/server'; +import { logger } from '@storybook/node-logger'; import options from './options'; -buildStatic(options); +async function build() { + try { + await buildStatic(options); + + // #15227 + process.exit(0); + } catch (error) { + logger.error(error); + } +} + +build(); From 9389325c80373d9cd96c2845d39e0b46ba2a7b16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20Veps=C3=A4l=C3=A4inen?= Date: Wed, 7 Jul 2021 10:22:06 +0300 Subject: [PATCH 2/2] fix: Remember to close webpack compiler It looks like this is the right way to go instead of `process.exit`. --- app/angular/src/server/build.ts | 3 --- lib/builder-webpack5/src/index.ts | 23 +++++++++++++++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/app/angular/src/server/build.ts b/app/angular/src/server/build.ts index 54d61f8c6318..fe1ed4fb11e3 100644 --- a/app/angular/src/server/build.ts +++ b/app/angular/src/server/build.ts @@ -5,9 +5,6 @@ import options from './options'; async function build() { try { await buildStatic(options); - - // #15227 - process.exit(0); } catch (error) { logger.error(error); } diff --git a/lib/builder-webpack5/src/index.ts b/lib/builder-webpack5/src/index.ts index c1639be842c1..cec11f62cfbe 100644 --- a/lib/builder-webpack5/src/index.ts +++ b/lib/builder-webpack5/src/index.ts @@ -129,14 +129,19 @@ export const build: WebpackBuilder['build'] = async ({ options, startTime }) => const config = await getConfig(options); return new Promise((succeed, fail) => { - webpackInstance(config).run((error, stats) => { + const compiler = webpackInstance(config); + + compiler.run((error, stats) => { if (error || !stats || stats.hasErrors()) { logger.error('=> Failed to build the preview'); process.exitCode = 1; if (error) { logger.error(error.message); - return fail(error); + + compiler.close(() => fail(error)); + + return; } if (stats && (stats.hasErrors() || stats.hasWarnings())) { @@ -145,7 +150,9 @@ export const build: WebpackBuilder['build'] = async ({ options, startTime }) => errors.forEach((e) => logger.error(e.message)); warnings.forEach((e) => logger.error(e.message)); - return fail(stats); + compiler.close(() => fail(stats)); + + return; } } @@ -154,7 +161,15 @@ export const build: WebpackBuilder['build'] = async ({ options, startTime }) => stats.toJson({ warnings: true }).warnings.forEach((e) => logger.warn(e.message)); } - return succeed(stats); + // https://webpack.js.org/api/node/#run + // #15227 + compiler.close((closeErr) => { + if (closeErr) { + return fail(closeErr); + } + + return succeed(stats); + }); }); }); };