From 5eb5d00b80bfd35ead1269fbb178973be149f013 Mon Sep 17 00:00:00 2001 From: Ryan Christian <33403762+rschristian@users.noreply.github.com> Date: Thu, 28 Jul 2022 13:03:29 -0500 Subject: [PATCH] fix: disable load manifest in dev (#1711) * fix: Ensure load-manifest is only generated in prod * docs: Adding changeset * fix: devServer live reload with `--esm` flag --- .changeset/tiny-books-flash.md | 5 +++++ packages/cli/lib/lib/webpack/create-load-manifest.js | 3 ++- packages/cli/lib/lib/webpack/push-manifest.js | 6 +++++- packages/cli/lib/lib/webpack/render-html-plugin.js | 2 +- packages/cli/lib/lib/webpack/webpack-client-config.js | 4 ++-- 5 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 .changeset/tiny-books-flash.md diff --git a/.changeset/tiny-books-flash.md b/.changeset/tiny-books-flash.md new file mode 100644 index 000000000..a405cd5c0 --- /dev/null +++ b/.changeset/tiny-books-flash.md @@ -0,0 +1,5 @@ +--- +'preact-cli': patch +--- + +Fix ensures that the load-manifest is only attempted to be built in prod. It serves no use in dev (as preloading is limited to prod) and can create a race condition when used alongside HMR. diff --git a/packages/cli/lib/lib/webpack/create-load-manifest.js b/packages/cli/lib/lib/webpack/create-load-manifest.js index a66d87e38..948ee24d8 100644 --- a/packages/cli/lib/lib/webpack/create-load-manifest.js +++ b/packages/cli/lib/lib/webpack/create-load-manifest.js @@ -1,4 +1,5 @@ -module.exports = (assets, namedChunkGroups) => { +module.exports = (assets, namedChunkGroups, isProd) => { + if (!isProd) return {}; /** * This is a mapping of generic/pre-build filenames to their postbuild output * diff --git a/packages/cli/lib/lib/webpack/push-manifest.js b/packages/cli/lib/lib/webpack/push-manifest.js index d45c9a675..b9966b814 100644 --- a/packages/cli/lib/lib/webpack/push-manifest.js +++ b/packages/cli/lib/lib/webpack/push-manifest.js @@ -2,6 +2,9 @@ const webpack = require('webpack'); const createLoadManifest = require('./create-load-manifest'); module.exports = class PushManifestPlugin { + constructor(isProd) { + this.isProd = isProd; + } apply(compiler) { compiler.hooks.emit.tap( { @@ -11,7 +14,8 @@ module.exports = class PushManifestPlugin { compilation => { const manifest = createLoadManifest( compilation.assets, - compilation.namedChunkGroups + compilation.namedChunkGroups, + this.isProd ); let output = JSON.stringify(manifest); diff --git a/packages/cli/lib/lib/webpack/render-html-plugin.js b/packages/cli/lib/lib/webpack/render-html-plugin.js index 00114ac8f..04d19d99c 100644 --- a/packages/cli/lib/lib/webpack/render-html-plugin.js +++ b/packages/cli/lib/lib/webpack/render-html-plugin.js @@ -89,7 +89,7 @@ module.exports = async function (config) { if (assets['push-manifest.json']) { return JSON.parse(assets['push-manifest.json'].source()); } - return createLoadManifest(assets, namedChunkGroups); + return createLoadManifest(assets, namedChunkGroups, config.isProd); }, config, url, diff --git a/packages/cli/lib/lib/webpack/webpack-client-config.js b/packages/cli/lib/lib/webpack/webpack-client-config.js index 0ffb77a3d..232ed4634 100644 --- a/packages/cli/lib/lib/webpack/webpack-client-config.js +++ b/packages/cli/lib/lib/webpack/webpack-client-config.js @@ -146,7 +146,7 @@ async function clientConfig(env) { 'process.env.ADD_SW': env.sw, 'process.env.PRERENDER': env.prerender, }), - new PushManifestPlugin(), + new PushManifestPlugin(env.isProd), ...(await renderHTMLPlugin(env)), ...getBabelEsmPlugin(env), copyPatterns.length !== 0 && @@ -331,7 +331,7 @@ function isDev(env) { ].filter(Boolean), devServer: { - hot: true, + hot: env.refresh, liveReload: !env.refresh, compress: true, devMiddleware: {