From a2fc6ac86a79e93382dfc9a150f8176953c69f75 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Tue, 3 Sep 2024 16:08:31 +0200 Subject: [PATCH 1/2] Use vendored React version in Middleware and Instrumentation --- .../next/src/build/create-compiler-aliases.ts | 17 +++++------------ packages/next/src/build/webpack-config.ts | 15 ++++++++++----- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/packages/next/src/build/create-compiler-aliases.ts b/packages/next/src/build/create-compiler-aliases.ts index 1234e9a7a1d78..16f5e074da94c 100644 --- a/packages/next/src/build/create-compiler-aliases.ts +++ b/packages/next/src/build/create-compiler-aliases.ts @@ -236,17 +236,6 @@ export function createAppRouterApiAliases(isServerOnlyLayer: boolean) { return aliasMap } -export function createRSCRendererAliases(bundledReactChannel: string) { - return { - // react-server-dom-webpack alias - 'react-server-dom-webpack/client$': `next/dist/compiled/react-server-dom-webpack${bundledReactChannel}/client`, - 'react-server-dom-webpack/client.edge$': `next/dist/compiled/react-server-dom-webpack${bundledReactChannel}/client.edge`, - 'react-server-dom-webpack/server.edge$': `next/dist/compiled/react-server-dom-webpack${bundledReactChannel}/server.edge`, - 'react-server-dom-webpack/server.node$': `next/dist/compiled/react-server-dom-webpack${bundledReactChannel}/server.node`, - 'react-server-dom-webpack/static.edge$': `next/dist/compiled/react-server-dom-webpack${bundledReactChannel}/static.edge`, - } -} - export function createRSCAliases( bundledReactChannel: string, { @@ -274,7 +263,11 @@ export function createRSCAliases( // optimizations to ignore the legacy build of react-dom/server in `server.edge` build 'react-dom/server.edge$': `next/dist/build/webpack/alias/react-dom-server-edge${bundledReactChannel}.js`, // react-server-dom-webpack alias - ...createRSCRendererAliases(bundledReactChannel), + 'react-server-dom-webpack/client$': `next/dist/compiled/react-server-dom-webpack${bundledReactChannel}/client`, + 'react-server-dom-webpack/client.edge$': `next/dist/compiled/react-server-dom-webpack${bundledReactChannel}/client.edge`, + 'react-server-dom-webpack/server.edge$': `next/dist/compiled/react-server-dom-webpack${bundledReactChannel}/server.edge`, + 'react-server-dom-webpack/server.node$': `next/dist/compiled/react-server-dom-webpack${bundledReactChannel}/server.node`, + 'react-server-dom-webpack/static.edge$': `next/dist/compiled/react-server-dom-webpack${bundledReactChannel}/static.edge`, } if (!isEdgeServer) { diff --git a/packages/next/src/build/webpack-config.ts b/packages/next/src/build/webpack-config.ts index 9efaff195e2c4..9b12bf14ce0bb 100644 --- a/packages/next/src/build/webpack-config.ts +++ b/packages/next/src/build/webpack-config.ts @@ -81,7 +81,6 @@ import { createRSCAliases, createNextApiEsmAliases, createAppRouterApiAliases, - createRSCRendererAliases, } from './create-compiler-aliases' import { hasCustomExportOutput } from '../export/utils' import { CssChunkingPlugin } from './webpack/plugins/css-chunking-plugin' @@ -1475,8 +1474,11 @@ export default async function getBaseWebpackConfig( resolve: { mainFields: getMainField(compilerType, true), conditionNames: reactServerCondition, - // Always use default channels when use installed react - alias: createRSCRendererAliases(''), + alias: createRSCAliases(bundledReactChannel, { + reactProductionProfiling, + layer: WEBPACK_LAYERS.middleware, + isEdgeServer, + }), }, }, { @@ -1486,8 +1488,11 @@ export default async function getBaseWebpackConfig( resolve: { mainFields: getMainField(compilerType, true), conditionNames: reactServerCondition, - // Always use default channels when use installed react - alias: createRSCRendererAliases(''), + alias: createRSCAliases(bundledReactChannel, { + reactProductionProfiling, + layer: WEBPACK_LAYERS.instrument, + isEdgeServer, + }), }, }, ...(hasAppDir From 0c22941c2b7b1b5a39e1e460fbc151be33b91218 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Thu, 5 Sep 2024 15:07:28 +0200 Subject: [PATCH 2/2] map middleware and instrumentation module path to rsc --- packages/next/src/build/create-compiler-aliases.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/next/src/build/create-compiler-aliases.ts b/packages/next/src/build/create-compiler-aliases.ts index 16f5e074da94c..d485932344a8e 100644 --- a/packages/next/src/build/create-compiler-aliases.ts +++ b/packages/next/src/build/create-compiler-aliases.ts @@ -14,6 +14,7 @@ import type { NextConfigComplete } from '../server/config-shared' import { defaultOverrides } from '../server/require-hook' import { NEXT_PROJECT_ROOT, hasExternalOtelApiPackage } from './webpack-config' import { WEBPACK_LAYERS } from '../lib/constants' +import { isWebpackServerOnlyLayer } from './utils' interface CompilerAliases { [alias: string]: string | string[] @@ -248,6 +249,14 @@ export function createRSCAliases( reactProductionProfiling: boolean } ): CompilerAliases { + const isServerOnlyLayer = isWebpackServerOnlyLayer(layer) + // For middleware, instrumentation layers, treat them as rsc layer. + // Since we only built the runtime package for rsc, convert everything to rsc + // to ensure the runtime modules path existed. + if (isServerOnlyLayer) { + layer = WEBPACK_LAYERS.reactServerComponents + } + let alias: Record = { react$: `next/dist/compiled/react${bundledReactChannel}`, 'react-dom$': `next/dist/compiled/react-dom${bundledReactChannel}`,