From c57a7f34e49154d440fcf914f9eb3aa36163383e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 22 Nov 2020 21:45:24 +0000 Subject: [PATCH 1/2] Close webpack compiler on prod build --- build-scripts/gulp/webpack.js | 106 +++++++++++++++------------------- 1 file changed, 45 insertions(+), 61 deletions(-) diff --git a/build-scripts/gulp/webpack.js b/build-scripts/gulp/webpack.js index dc6570ba4eac..9051231cae70 100644 --- a/build-scripts/gulp/webpack.js +++ b/build-scripts/gulp/webpack.js @@ -47,7 +47,7 @@ const runDevServer = ({ ); }); -const handler = (done) => (err, stats) => { +const doneHandler = (done) => (err, stats) => { if (err) { log.error(err.stack || err); if (err.details) { @@ -67,11 +67,20 @@ const handler = (done) => (err, stats) => { } }; +const prodBuild = (conf) => + new Promise((resolve) => { + const compiler = webpack( + conf, + // At end of stats printing, close compiler and resolve promise + doneHandler(() => compiler.close(resolve)) + ); + }); + gulp.task("webpack-watch-app", () => { - // we are not calling done, so this command will run forever + // This command will run forever because we don't close compiler webpack(createAppConfig({ isProdBuild: false, latestBuild: true })).watch( { ignored: /build-translations/ }, - handler() + doneHandler() ); gulp.watch( path.join(paths.translations_src, "en.json"), @@ -79,15 +88,12 @@ gulp.task("webpack-watch-app", () => { ); }); -gulp.task( - "webpack-prod-app", - () => - new Promise((resolve) => - webpack( - bothBuilds(createAppConfig, { isProdBuild: true }), - handler(resolve) - ) - ) +gulp.task("webpack-prod-app", () => + prodBuild( + bothBuilds(createAppConfig, { + isProdBuild: true, + }) + ) ); gulp.task("webpack-dev-server-demo", () => { @@ -98,17 +104,12 @@ gulp.task("webpack-dev-server-demo", () => { }); }); -gulp.task( - "webpack-prod-demo", - () => - new Promise((resolve) => - webpack( - bothBuilds(createDemoConfig, { - isProdBuild: true, - }), - handler(resolve) - ) - ) +gulp.task("webpack-prod-demo", () => + prodBuild( + bothBuilds(createDemoConfig, { + isProdBuild: true, + }) + ) ); gulp.task("webpack-dev-server-cast", () => { @@ -121,41 +122,30 @@ gulp.task("webpack-dev-server-cast", () => { }); }); -gulp.task( - "webpack-prod-cast", - () => - new Promise((resolve) => - webpack( - bothBuilds(createCastConfig, { - isProdBuild: true, - }), - - handler(resolve) - ) - ) +gulp.task("webpack-prod-cast", () => + prodBuild( + bothBuilds(createCastConfig, { + isProdBuild: true, + }) + ) ); gulp.task("webpack-watch-hassio", () => { - // we are not calling done, so this command will run forever + // This command will run forever because we don't close compiler webpack( createHassioConfig({ isProdBuild: false, latestBuild: true, }) - ).watch({}, handler()); + ).watch({}, doneHandler()); }); -gulp.task( - "webpack-prod-hassio", - () => - new Promise((resolve) => - webpack( - bothBuilds(createHassioConfig, { - isProdBuild: true, - }), - handler(resolve) - ) - ) +gulp.task("webpack-prod-hassio", () => + prodBuild( + bothBuilds(createHassioConfig, { + isProdBuild: true, + }) + ) ); gulp.task("webpack-dev-server-gallery", () => { @@ -167,17 +157,11 @@ gulp.task("webpack-dev-server-gallery", () => { }); }); -gulp.task( - "webpack-prod-gallery", - () => - new Promise((resolve) => - webpack( - createGalleryConfig({ - isProdBuild: true, - latestBuild: true, - }), - - handler(resolve) - ) - ) +gulp.task("webpack-prod-gallery", () => + prodBuild( + createGalleryConfig({ + isProdBuild: true, + latestBuild: true, + }) + ) ); From 87db8bdd585c4222d212a6b3cafa89b0669918d9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 23 Nov 2020 11:37:11 +0100 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Bram Kragten --- build-scripts/gulp/webpack.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build-scripts/gulp/webpack.js b/build-scripts/gulp/webpack.js index 9051231cae70..c5790f0b691d 100644 --- a/build-scripts/gulp/webpack.js +++ b/build-scripts/gulp/webpack.js @@ -69,10 +69,10 @@ const doneHandler = (done) => (err, stats) => { const prodBuild = (conf) => new Promise((resolve) => { - const compiler = webpack( + webpack( conf, - // At end of stats printing, close compiler and resolve promise - doneHandler(() => compiler.close(resolve)) + // Resolve promise when done. Because we pass a callback, webpack closes itself + doneHandler(resolve) ); });