Skip to content

Commit

Permalink
Use vendored React version in Middleware and Instrumentation (#69619)
Browse files Browse the repository at this point in the history
Co-authored-by: Jiachi Liu <inbox@huozhi.im>
  • Loading branch information
eps1lon and huozhi authored Sep 5, 2024
1 parent b817354 commit 2595a27
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 17 deletions.
26 changes: 14 additions & 12 deletions packages/next/src/build/create-compiler-aliases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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[]
Expand Down Expand Up @@ -236,17 +237,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,
{
Expand All @@ -259,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<string, string> = {
react$: `next/dist/compiled/react${bundledReactChannel}`,
'react-dom$': `next/dist/compiled/react-dom${bundledReactChannel}`,
Expand All @@ -274,7 +272,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) {
Expand Down
15 changes: 10 additions & 5 deletions packages/next/src/build/webpack-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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,
}),
},
},
{
Expand All @@ -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
Expand Down

0 comments on commit 2595a27

Please sign in to comment.