Skip to content

Commit 65b0bb2

Browse files
authored
Separate RSC and SSR jsx-runtime modules (#56438)
There should be no shared react packages in our server runtime. rsc should always be separate from ssr. This update reconfigures the runtiem to eliminate shared react modules. the jsx runtime will now be separate for RSC and SSR. this is necessary because the implementations for the jsx runtime rely on React and they need to see the right versions. Additionally I fixed an alias so that the shared subset react is used when using react-server condition. I also fixed a bug in 2 tests related to class/className. Note: this PR blocks upgrading React canary due to internal changes in how React state is managed in when using the `react-server` condition
1 parent 400c679 commit 65b0bb2

File tree

13 files changed

+32
-22
lines changed

13 files changed

+32
-22
lines changed

packages/next-swc/crates/next-core/src/next_import_map.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ async fn insert_next_server_special_aliases(
452452
match runtime {
453453
NextRuntime::Edge => "next/dist/compiled/react/jsx-runtime",
454454
NextRuntime::NodeJs => {
455-
"next/dist/server/future/route-modules/app-page/vendored/shared/\
455+
"next/dist/server/future/route-modules/app-page/vendored/ssr/\
456456
react-jsx-runtime"
457457
}
458458
},
@@ -465,7 +465,7 @@ async fn insert_next_server_special_aliases(
465465
match runtime {
466466
NextRuntime::Edge => "next/dist/compiled/react/jsx-dev-runtime",
467467
NextRuntime::NodeJs => {
468-
"next/dist/server/future/route-modules/app-page/vendored/shared/\
468+
"next/dist/server/future/route-modules/app-page/vendored/ssr/\
469469
react-jsx-dev-runtime"
470470
}
471471
},
@@ -579,7 +579,7 @@ async fn insert_next_server_special_aliases(
579579
match runtime {
580580
NextRuntime::Edge => "next/dist/compiled/react/jsx-runtime",
581581
NextRuntime::NodeJs => {
582-
"next/dist/server/future/route-modules/app-page/vendored/shared/\
582+
"next/dist/server/future/route-modules/app-page/vendored/rsc/\
583583
react-jsx-runtime"
584584
}
585585
},
@@ -592,7 +592,7 @@ async fn insert_next_server_special_aliases(
592592
match runtime {
593593
NextRuntime::Edge => "next/dist/compiled/react/jsx-dev-runtime",
594594
NextRuntime::NodeJs => {
595-
"next/dist/server/future/route-modules/app-page/vendored/shared/\
595+
"next/dist/server/future/route-modules/app-page/vendored/rsc/\
596596
react-jsx-dev-runtime"
597597
}
598598
},

packages/next/src/build/webpack-config.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,16 +176,16 @@ function createRSCAliases(
176176
if (!opts.isEdgeServer) {
177177
if (opts.layer === WEBPACK_LAYERS.serverSideRendering) {
178178
alias = Object.assign(alias, {
179-
'react/jsx-runtime$': `next/dist/server/future/route-modules/app-page/vendored/shared/react-jsx-runtime`,
180-
'react/jsx-dev-runtime$': `next/dist/server/future/route-modules/app-page/vendored/shared/react-jsx-dev-runtime`,
179+
'react/jsx-runtime$': `next/dist/server/future/route-modules/app-page/vendored/${opts.layer}/react-jsx-runtime`,
180+
'react/jsx-dev-runtime$': `next/dist/server/future/route-modules/app-page/vendored/${opts.layer}/react-jsx-dev-runtime`,
181181
react$: `next/dist/server/future/route-modules/app-page/vendored/${opts.layer}/react`,
182182
'react-dom$': `next/dist/server/future/route-modules/app-page/vendored/${opts.layer}/react-dom`,
183183
'react-server-dom-webpack/client.edge$': `next/dist/server/future/route-modules/app-page/vendored/${opts.layer}/react-server-dom-webpack-client-edge`,
184184
})
185185
} else if (opts.layer === WEBPACK_LAYERS.reactServerComponents) {
186186
alias = Object.assign(alias, {
187-
'react/jsx-runtime$': `next/dist/server/future/route-modules/app-page/vendored/shared/react-jsx-runtime`,
188-
'react/jsx-dev-runtime$': `next/dist/server/future/route-modules/app-page/vendored/shared/react-jsx-dev-runtime`,
187+
'react/jsx-runtime$': `next/dist/server/future/route-modules/app-page/vendored/${opts.layer}/react-jsx-runtime`,
188+
'react/jsx-dev-runtime$': `next/dist/server/future/route-modules/app-page/vendored/${opts.layer}/react-jsx-dev-runtime`,
189189
react$: `next/dist/server/future/route-modules/app-page/vendored/${opts.layer}/react`,
190190
'react-dom$': `next/dist/server/future/route-modules/app-page/vendored/${opts.layer}/react-dom`,
191191
'react-server-dom-webpack/server.edge$': `next/dist/server/future/route-modules/app-page/vendored/${opts.layer}/react-server-dom-webpack-server-edge`,

packages/next/src/server/future/route-modules/app-page/module.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,11 @@ import * as vendoredContexts from './vendored/contexts/entrypoints'
1515

1616
let vendoredReactRSC
1717
let vendoredReactSSR
18-
let vendoredReactShared
1918

2019
// the vendored Reacts are loaded from their original source in the edge runtime
2120
if (process.env.NEXT_RUNTIME !== 'edge') {
2221
vendoredReactRSC = require('./vendored/rsc/entrypoints')
2322
vendoredReactSSR = require('./vendored/ssr/entrypoints')
24-
vendoredReactShared = require('./vendored/shared/entrypoints')
2523
}
2624

2725
type AppPageUserlandModule = {
@@ -64,7 +62,6 @@ export class AppPageRouteModule extends RouteModule<
6462
const vendored = {
6563
'react-rsc': vendoredReactRSC,
6664
'react-ssr': vendoredReactSSR,
67-
'react-shared': vendoredReactShared,
6865
contexts: vendoredContexts,
6966
}
7067

packages/next/src/server/future/route-modules/app-page/vendored/rsc/entrypoints.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as React from 'react'
2-
32
import * as ReactDOM from 'react-dom/server-rendering-stub'
3+
import * as ReactJsxDevRuntime from 'react/jsx-dev-runtime'
4+
import * as ReactJsxRuntime from 'react/jsx-runtime'
45

56
function getAltProxyForBindingsDEV(
67
type: 'Turbopack' | 'Webpack',
@@ -68,6 +69,8 @@ if (process.env.TURBOPACK) {
6869

6970
export {
7071
React,
72+
ReactJsxDevRuntime,
73+
ReactJsxRuntime,
7174
ReactDOM,
7275
ReactServerDOMWebpackServerEdge,
7376
ReactServerDOMTurbopackServerEdge,
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module.exports = require('../../module.compiled').vendored[
2-
'react-shared'
2+
'react-rsc'
33
].ReactJsxDevRuntime
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module.exports = require('../../module.compiled').vendored[
2-
'react-shared'
2+
'react-rsc'
33
].ReactJsxRuntime

packages/next/src/server/future/route-modules/app-page/vendored/shared/entrypoints.ts

Lines changed: 0 additions & 4 deletions
This file was deleted.

packages/next/src/server/future/route-modules/app-page/vendored/ssr/entrypoints.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import * as React from 'react'
2-
32
import * as ReactDOM from 'react-dom/server-rendering-stub'
3+
import * as ReactJsxDevRuntime from 'react/jsx-dev-runtime'
4+
import * as ReactJsxRuntime from 'react/jsx-runtime'
45

56
// eslint-disable-next-line import/no-extraneous-dependencies
67
import * as ReactDOMServerEdge from 'react-dom/server.edge'
7-
// eslint-disable-next-line import/no-extraneous-dependencies
88

99
function getAltProxyForBindingsDEV(
1010
type: 'Turbopack' | 'Webpack',
@@ -52,6 +52,8 @@ if (process.env.TURBOPACK) {
5252

5353
export {
5454
React,
55+
ReactJsxDevRuntime,
56+
ReactJsxRuntime,
5557
ReactDOM,
5658
ReactDOMServerEdge,
5759
ReactServerDOMTurbopackClientEdge,
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = require('../../module.compiled').vendored[
2+
'react-ssr'
3+
].ReactJsxDevRuntime
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = require('../../module.compiled').vendored[
2+
'react-ssr'
3+
].ReactJsxRuntime

packages/next/webpack.config.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,9 @@ module.exports = ({ dev, turbo, bundleType, experimental }) => {
208208
react$: `next/dist/compiled/react${
209209
experimental ? '-experimental' : ''
210210
}/react.shared-subset`,
211+
'next/dist/compiled/react$': `next/dist/compiled/react${
212+
experimental ? '-experimental' : ''
213+
}/react.shared-subset`,
211214
},
212215
},
213216
layer: 'react-server',
@@ -220,6 +223,9 @@ module.exports = ({ dev, turbo, bundleType, experimental }) => {
220223
react$: `next/dist/compiled/react${
221224
experimental ? '-experimental' : ''
222225
}/react.shared-subset`,
226+
'next/dist/compiled/react$': `next/dist/compiled/react${
227+
experimental ? '-experimental' : ''
228+
}/react.shared-subset`,
223229
},
224230
},
225231
},

test/e2e/app-dir/third-parties/app/google-maps-embed/page.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { GoogleMapsEmbed } from '@next/third-parties/google'
22

33
const Page = () => {
44
return (
5-
<div class="container">
5+
<div className="container">
66
<h1>Google Maps Embed</h1>
77
<GoogleMapsEmbed
88
apiKey="XYZ"

test/e2e/app-dir/third-parties/app/youtube-embed/page.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { YouTubeEmbed } from '@next/third-parties/google'
22

33
const Page = () => {
44
return (
5-
<div class="container">
5+
<div className="container">
66
<h1>Youtube Embed</h1>
77
<YouTubeEmbed videoid="ogfYd705cRs" height={400} />
88
</div>

0 commit comments

Comments
 (0)