Skip to content

Commit 13f7ea4

Browse files
authored
Optimize server runtime bundles (#77723)
1 parent 4190391 commit 13f7ea4

File tree

11 files changed

+144
-85
lines changed

11 files changed

+144
-85
lines changed

Diff for: packages/next/next-runtime.webpack-config.js

+13-13
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ const appExternals = [
4040
'next/dist/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.production.js',
4141
]
4242

43-
function makeAppAliases(reactChannel = '') {
43+
function makeAppAliases({ experimental, bundler }) {
44+
const reactChannel = experimental ? '-experimental' : ''
45+
4446
return {
4547
react$: `next/dist/compiled/react${reactChannel}`,
4648
'react/react.react-server$': `next/dist/compiled/react${reactChannel}/react.react-server`,
@@ -61,19 +63,16 @@ function makeAppAliases(reactChannel = '') {
6163
'react-server-dom-turbopack/server.edge$': `next/dist/compiled/react-server-dom-turbopack${reactChannel}/server.edge`,
6264
'react-server-dom-turbopack/server.node$': `next/dist/compiled/react-server-dom-turbopack${reactChannel}/server.node`,
6365
'react-server-dom-turbopack/static.edge$': `next/dist/compiled/react-server-dom-turbopack${reactChannel}/static.edge`,
64-
'react-server-dom-webpack/client$': `next/dist/compiled/react-server-dom-webpack${reactChannel}/client`,
65-
'react-server-dom-webpack/client.edge$': `next/dist/compiled/react-server-dom-webpack${reactChannel}/client.edge`,
66-
'react-server-dom-webpack/server.edge$': `next/dist/compiled/react-server-dom-webpack${reactChannel}/server.edge`,
67-
'react-server-dom-webpack/server.node$': `next/dist/compiled/react-server-dom-webpack${reactChannel}/server.node`,
68-
'react-server-dom-webpack/static.edge$': `next/dist/compiled/react-server-dom-webpack${reactChannel}/static.edge`,
66+
'react-server-dom-webpack/client$': `next/dist/compiled/react-server-dom-${bundler}${reactChannel}/client`,
67+
'react-server-dom-webpack/client.edge$': `next/dist/compiled/react-server-dom-${bundler}${reactChannel}/client.edge`,
68+
'react-server-dom-webpack/server.edge$': `next/dist/compiled/react-server-dom-${bundler}${reactChannel}/server.edge`,
69+
'react-server-dom-webpack/server.node$': `next/dist/compiled/react-server-dom-${bundler}${reactChannel}/server.node`,
70+
'react-server-dom-webpack/static.edge$': `next/dist/compiled/react-server-dom-${bundler}${reactChannel}/static.edge`,
6971
'@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts':
7072
'next/dist/client/dev/noop-turbopack-hmr',
7173
}
7274
}
7375

74-
const appAliases = makeAppAliases()
75-
const appExperimentalAliases = makeAppAliases('-experimental')
76-
7776
const sharedExternals = [
7877
'styled-jsx',
7978
'styled-jsx/style',
@@ -230,7 +229,7 @@ module.exports = ({ dev, turbo, bundleType, experimental, ...rest }) => {
230229
experimental ? true : false
231230
),
232231
'process.env.NEXT_RUNTIME': JSON.stringify('nodejs'),
233-
...(!dev ? { 'process.env.TURBOPACK': JSON.stringify(turbo) } : {}),
232+
'process.env.TURBOPACK': JSON.stringify(turbo),
234233
}),
235234
!!process.env.ANALYZE &&
236235
new BundleAnalyzerPlugin({
@@ -262,9 +261,10 @@ module.exports = ({ dev, turbo, bundleType, experimental, ...rest }) => {
262261
resolve: {
263262
alias:
264263
bundleType === 'app'
265-
? experimental
266-
? appExperimentalAliases
267-
: appAliases
264+
? makeAppAliases({
265+
experimental,
266+
bundler: turbo ? 'turbopack' : 'webpack',
267+
})
268268
: {},
269269
},
270270
module: {

Diff for: packages/next/src/build/webpack/plugins/flight-manifest-plugin.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ interface UninlinedCssFile {
9999
export interface ClientReferenceManifest extends ClientReferenceManifestForRsc {
100100
readonly moduleLoading: {
101101
prefix: string
102-
crossOrigin: string | null
102+
crossOrigin?: 'use-credentials' | ''
103103
}
104104
ssrModuleMapping: {
105105
[moduleId: string]: ManifestNode
@@ -246,8 +246,8 @@ export class ClientReferenceManifestPlugin {
246246
typeof configuredCrossOriginLoading === 'string'
247247
? configuredCrossOriginLoading === 'use-credentials'
248248
? configuredCrossOriginLoading
249-
: 'anonymous'
250-
: null
249+
: '' // === 'anonymous'
250+
: undefined
251251

252252
if (typeof compilation.outputOptions.publicPath !== 'string') {
253253
throw new Error(

Diff for: packages/next/src/server/app-render/app-render.tsx

+3-10
Original file line numberDiff line numberDiff line change
@@ -4149,16 +4149,9 @@ export async function warmFlightResponse(
41494149
flightStream: ReadableStream<Uint8Array>,
41504150
clientReferenceManifest: DeepReadonly<ClientReferenceManifest>
41514151
) {
4152-
let createFromReadableStream
4153-
if (process.env.TURBOPACK) {
4154-
createFromReadableStream =
4155-
// eslint-disable-next-line import/no-extraneous-dependencies
4156-
require('react-server-dom-turbopack/client.edge').createFromReadableStream
4157-
} else {
4158-
createFromReadableStream =
4159-
// eslint-disable-next-line import/no-extraneous-dependencies
4160-
require('react-server-dom-webpack/client.edge').createFromReadableStream
4161-
}
4152+
const { createFromReadableStream } =
4153+
// eslint-disable-next-line import/no-extraneous-dependencies
4154+
require('react-server-dom-webpack/client.edge') as typeof import('react-server-dom-webpack/client.edge')
41624155

41634156
try {
41644157
createFromReadableStream(flightStream, {

Diff for: packages/next/src/server/app-render/use-flight-response.tsx

+4-12
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,11 @@ export function useFlightStream<T>(
3030
}
3131

3232
// react-server-dom-webpack/client.edge must not be hoisted for require cache clearing to work correctly
33-
let createFromReadableStream
34-
// @TODO: investigate why the aliasing for turbopack doesn't pick this up, requiring this runtime check
35-
if (process.env.TURBOPACK) {
36-
createFromReadableStream =
37-
// eslint-disable-next-line import/no-extraneous-dependencies
38-
require('react-server-dom-turbopack/client.edge').createFromReadableStream
39-
} else {
40-
createFromReadableStream =
41-
// eslint-disable-next-line import/no-extraneous-dependencies
42-
require('react-server-dom-webpack/client.edge').createFromReadableStream
43-
}
33+
const { createFromReadableStream } =
34+
// eslint-disable-next-line import/no-extraneous-dependencies
35+
require('react-server-dom-webpack/client.edge') as typeof import('react-server-dom-webpack/client.edge')
4436

45-
const newResponse = createFromReadableStream(flightStream, {
37+
const newResponse = createFromReadableStream<T>(flightStream, {
4638
serverConsumerManifest: {
4739
moduleLoading: clientReferenceManifest.moduleLoading,
4840
moduleMap: isEdgeRuntime

Diff for: packages/next/src/server/dev/hot-reloader-turbopack.ts

+11-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import {
3737
} from '../../client/components/react-dev-overlay/server/middleware-turbopack'
3838
import { PageNotFoundError } from '../../shared/lib/utils'
3939
import { debounce } from '../utils'
40-
import { deleteAppClientCache, deleteCache } from './require-cache'
40+
import { deleteCache, deleteFromRequireCache } from './require-cache'
4141
import {
4242
clearAllModuleContexts,
4343
clearModuleContext,
@@ -339,7 +339,16 @@ export async function createHotReloaderTurbopack(
339339
)
340340

341341
if (hasAppPaths) {
342-
deleteAppClientCache()
342+
deleteFromRequireCache(
343+
require.resolve(
344+
'next/dist/compiled/next-server/app-page-turbo.runtime.dev.js'
345+
)
346+
)
347+
deleteFromRequireCache(
348+
require.resolve(
349+
'next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js'
350+
)
351+
)
343352
}
344353

345354
const serverPaths = writtenEndpoint.serverPaths.map(({ path: p }) =>

Diff for: packages/next/src/server/dev/require-cache.ts

+1-12
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import isError from '../../lib/is-error'
22
import { realpathSync } from '../../lib/realpath'
33
import { clearManifestCache } from '../load-manifest'
44

5-
function deleteFromRequireCache(filePath: string) {
5+
export function deleteFromRequireCache(filePath: string) {
66
try {
77
filePath = realpathSync(filePath)
88
} catch (e) {
@@ -27,17 +27,6 @@ function deleteFromRequireCache(filePath: string) {
2727
return false
2828
}
2929

30-
export function deleteAppClientCache() {
31-
deleteFromRequireCache(
32-
require.resolve('next/dist/compiled/next-server/app-page.runtime.dev.js')
33-
)
34-
deleteFromRequireCache(
35-
require.resolve(
36-
'next/dist/compiled/next-server/app-page-experimental.runtime.dev.js'
37-
)
38-
)
39-
}
40-
4130
export function deleteCache(filePath: string) {
4231
// try to clear it from the fs cache
4332
clearManifestCache(filePath)

Diff for: packages/next/src/server/route-modules/app-page/module.compiled.js

+20-8
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,31 @@ if (process.env.NEXT_RUNTIME === 'edge') {
33
} else {
44
if (process.env.__NEXT_EXPERIMENTAL_REACT) {
55
if (process.env.NODE_ENV === 'development') {
6-
module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')
7-
} else if (process.env.TURBOPACK) {
8-
module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')
6+
if (process.env.TURBOPACK) {
7+
module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')
8+
} else {
9+
module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')
10+
}
911
} else {
10-
module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')
12+
if (process.env.TURBOPACK) {
13+
module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')
14+
} else {
15+
module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')
16+
}
1117
}
1218
} else {
1319
if (process.env.NODE_ENV === 'development') {
14-
module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')
15-
} else if (process.env.TURBOPACK) {
16-
module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')
20+
if (process.env.TURBOPACK) {
21+
module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')
22+
} else {
23+
module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')
24+
}
1725
} else {
18-
module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')
26+
if (process.env.TURBOPACK) {
27+
module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')
28+
} else {
29+
module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')
30+
}
1931
}
2032
}
2133
}

Diff for: packages/next/src/server/route-modules/app-route/module.compiled.js

+20-8
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,31 @@ if (process.env.NEXT_RUNTIME === 'edge') {
33
} else {
44
if (process.env.__NEXT_EXPERIMENTAL_REACT) {
55
if (process.env.NODE_ENV === 'development') {
6-
module.exports = require('next/dist/compiled/next-server/app-route-experimental.runtime.dev.js')
7-
} else if (process.env.TURBOPACK) {
8-
module.exports = require('next/dist/compiled/next-server/app-route-turbo-experimental.runtime.prod.js')
6+
if (process.env.TURBOPACK) {
7+
module.exports = require('next/dist/compiled/next-server/app-route-turbo-experimental.runtime.dev.js')
8+
} else {
9+
module.exports = require('next/dist/compiled/next-server/app-route-experimental.runtime.dev.js')
10+
}
911
} else {
10-
module.exports = require('next/dist/compiled/next-server/app-route-experimental.runtime.prod.js')
12+
if (process.env.TURBOPACK) {
13+
module.exports = require('next/dist/compiled/next-server/app-route-turbo-experimental.runtime.prod.js')
14+
} else {
15+
module.exports = require('next/dist/compiled/next-server/app-route-experimental.runtime.prod.js')
16+
}
1117
}
1218
} else {
1319
if (process.env.NODE_ENV === 'development') {
14-
module.exports = require('next/dist/compiled/next-server/app-route.runtime.dev.js')
15-
} else if (process.env.TURBOPACK) {
16-
module.exports = require('next/dist/compiled/next-server/app-route-turbo.runtime.prod.js')
20+
if (process.env.TURBOPACK) {
21+
module.exports = require('next/dist/compiled/next-server/app-route-turbo.runtime.dev.js')
22+
} else {
23+
module.exports = require('next/dist/compiled/next-server/app-route.runtime.dev.js')
24+
}
1725
} else {
18-
module.exports = require('next/dist/compiled/next-server/app-route.runtime.prod.js')
26+
if (process.env.TURBOPACK) {
27+
module.exports = require('next/dist/compiled/next-server/app-route-turbo.runtime.prod.js')
28+
} else {
29+
module.exports = require('next/dist/compiled/next-server/app-route.runtime.prod.js')
30+
}
1931
}
2032
}
2133
}

Diff for: packages/next/src/server/route-modules/pages-api/module.compiled.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,16 @@ if (process.env.NEXT_RUNTIME === 'edge') {
22
module.exports = require('next/dist/server/route-modules/pages-api/module.js')
33
} else {
44
if (process.env.NODE_ENV === 'development') {
5-
module.exports = require('next/dist/compiled/next-server/pages-api.runtime.dev.js')
6-
} else if (process.env.TURBOPACK) {
7-
module.exports = require('next/dist/compiled/next-server/pages-api-turbo.runtime.prod.js')
5+
if (process.env.TURBOPACK) {
6+
module.exports = require('next/dist/compiled/next-server/pages-api-turbo.runtime.dev.js')
7+
} else {
8+
module.exports = require('next/dist/compiled/next-server/pages-api.runtime.dev.js')
9+
}
810
} else {
9-
module.exports = require('next/dist/compiled/next-server/pages-api.runtime.prod.js')
11+
if (process.env.TURBOPACK) {
12+
module.exports = require('next/dist/compiled/next-server/pages-api-turbo.runtime.prod.js')
13+
} else {
14+
module.exports = require('next/dist/compiled/next-server/pages-api.runtime.prod.js')
15+
}
1016
}
1117
}

Diff for: packages/next/src/server/route-modules/pages/module.compiled.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,16 @@ if (process.env.NEXT_RUNTIME === 'edge') {
22
module.exports = require('next/dist/server/route-modules/pages/module.js')
33
} else {
44
if (process.env.NODE_ENV === 'development') {
5-
module.exports = require('next/dist/compiled/next-server/pages.runtime.dev.js')
6-
} else if (process.env.TURBOPACK) {
7-
module.exports = require('next/dist/compiled/next-server/pages-turbo.runtime.prod.js')
5+
if (process.env.TURBOPACK) {
6+
module.exports = require('next/dist/compiled/next-server/pages-turbo.runtime.dev.js')
7+
} else {
8+
module.exports = require('next/dist/compiled/next-server/pages.runtime.dev.js')
9+
}
810
} else {
9-
module.exports = require('next/dist/compiled/next-server/pages.runtime.prod.js')
11+
if (process.env.TURBOPACK) {
12+
module.exports = require('next/dist/compiled/next-server/pages-turbo.runtime.prod.js')
13+
} else {
14+
module.exports = require('next/dist/compiled/next-server/pages.runtime.prod.js')
15+
}
1016
}
1117
}

0 commit comments

Comments
 (0)