From b6db0a4882e9772cda685eda8cd0502d6c00febe Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Tue, 1 Feb 2022 22:46:07 +0100 Subject: [PATCH] fix problem with HMR when middleware and page reference the same node_module (#33873) fixes https://github.com/vercel/next.js/issues/31827 ## Bug - [x] Related issues linked using `fixes #number` - [x] Integration tests added - [ ] Errors have helpful link attached, see `contributing.md` ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have helpful link attached, see `contributing.md` ## Documentation / Examples - [ ] Make sure the linting passes by running `yarn lint` --- packages/next/build/webpack-config.ts | 12 ------------ .../hmr/node_modules/shared-package/index.js | 1 + .../hmr/node_modules/shared-package/package.json | 3 +++ .../middleware/hmr/pages/about/_middleware.js | 2 ++ test/integration/middleware/hmr/pages/index.js | 3 +++ 5 files changed, 9 insertions(+), 12 deletions(-) create mode 100644 test/integration/middleware/hmr/node_modules/shared-package/index.js create mode 100644 test/integration/middleware/hmr/node_modules/shared-package/package.json diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index 647194bfbef8..2c62c2d34243 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -959,11 +959,6 @@ export default async function getBaseWebpackConfig( }, } - const nonUserCondition = { - include: /node_modules/, - exclude: babelIncludeRegexes, - } - let webpackConfig: webpack.Configuration = { parallelism: Number(process.env.NEXT_WEBPACK_PARALLELISM) || undefined, externals: targetWeb @@ -1256,13 +1251,6 @@ export default async function getBaseWebpackConfig( }, ], }, - { - ...nonUserCondition, - // Make all non-user modules to be compiled in a single layer - // This avoids compiling them mutliple times and avoids module id changes - issuerLayer: 'middleware', - layer: '', - }, ...(!config.images.disableStaticImages ? [ { diff --git a/test/integration/middleware/hmr/node_modules/shared-package/index.js b/test/integration/middleware/hmr/node_modules/shared-package/index.js new file mode 100644 index 000000000000..a8653a9c9264 --- /dev/null +++ b/test/integration/middleware/hmr/node_modules/shared-package/index.js @@ -0,0 +1 @@ +module.exports = 42 diff --git a/test/integration/middleware/hmr/node_modules/shared-package/package.json b/test/integration/middleware/hmr/node_modules/shared-package/package.json new file mode 100644 index 000000000000..1587a669681c --- /dev/null +++ b/test/integration/middleware/hmr/node_modules/shared-package/package.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} diff --git a/test/integration/middleware/hmr/pages/about/_middleware.js b/test/integration/middleware/hmr/pages/about/_middleware.js index 66902bd191d7..3146e1d20277 100644 --- a/test/integration/middleware/hmr/pages/about/_middleware.js +++ b/test/integration/middleware/hmr/pages/about/_middleware.js @@ -1,5 +1,7 @@ import { NextResponse } from 'next/server' +import magicValue from 'shared-package' export function middleware(request) { + if (magicValue !== 42) throw new Error('shared-package problem') return NextResponse.rewrite(new URL('/about/a', request.url)) } diff --git a/test/integration/middleware/hmr/pages/index.js b/test/integration/middleware/hmr/pages/index.js index 36f47d633775..fa99cf9c2eb8 100644 --- a/test/integration/middleware/hmr/pages/index.js +++ b/test/integration/middleware/hmr/pages/index.js @@ -1,3 +1,6 @@ +import magicValue from 'shared-package' +if (magicValue !== 42) throw new Error('shared-package problem') + export default function Home() { return (