Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(turbopack): react-dom/server in rsc context #61165

Merged
merged 1 commit into from
Feb 14, 2024

Conversation

ForsakenHarmony
Copy link
Contributor

@ForsakenHarmony ForsakenHarmony commented Jan 25, 2024

What?

Probably not the right solution, next.js disables the react-server import condition in there somehow I think

Why?

Resend uses @react-email/render which uses renderToString from react-dom/server.
Unfortunately importing react-dom/server with the react-server import condition leads to a broken bundle (which seems like a bug in react?).

Closes PACK-2243
Fixes #57936

@ijjk ijjk added Turbopack Related to Turbopack with Next.js. created-by: Turbopack team PRs by the Turbopack team. type: next labels Jan 25, 2024
@ijjk
Copy link
Member

ijjk commented Jan 25, 2024

Stats from current PR

Default Build
General
vercel/next.js canary vercel/next.js hrmny/pack-2243-fix-rsc-react-dom-server Change
buildDuration 21.6s 21.6s N/A
buildDurationCached 9.3s 8s N/A
nodeModulesSize 196 MB 196 MB
nextStartRea..uration (ms) 445ms 440ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js hrmny/pack-2243-fix-rsc-react-dom-server Change
1068-HASH.js gzip 30 kB 30 kB N/A
3f784ff6-HASH.js gzip 53.5 kB 53.5 kB N/A
4944-HASH.js gzip 4.96 kB 4.96 kB N/A
8423.HASH.js gzip 181 B 181 B
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 241 B 243 B N/A
main-HASH.js gzip 32 kB 32 kB N/A
webpack-HASH.js gzip 1.7 kB 1.7 kB
Overall change 47.1 kB 47.1 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js hrmny/pack-2243-fix-rsc-react-dom-server Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary vercel/next.js hrmny/pack-2243-fix-rsc-react-dom-server Change
_app-HASH.js gzip 196 B 196 B
_error-HASH.js gzip 184 B 183 B N/A
amp-HASH.js gzip 503 B 504 B N/A
css-HASH.js gzip 323 B 324 B N/A
dynamic-HASH.js gzip 2.5 kB 2.51 kB N/A
edge-ssr-HASH.js gzip 258 B 259 B N/A
head-HASH.js gzip 353 B 351 B N/A
hooks-HASH.js gzip 370 B 370 B
image-HASH.js gzip 4.21 kB 4.2 kB N/A
index-HASH.js gzip 259 B 259 B
link-HASH.js gzip 2.68 kB 2.67 kB N/A
routerDirect..HASH.js gzip 313 B 314 B N/A
script-HASH.js gzip 386 B 385 B N/A
withRouter-HASH.js gzip 309 B 311 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 931 B 931 B
Client Build Manifests
vercel/next.js canary vercel/next.js hrmny/pack-2243-fix-rsc-react-dom-server Change
_buildManifest.js gzip 485 B 484 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js hrmny/pack-2243-fix-rsc-react-dom-server Change
index.html gzip 529 B 527 B N/A
link.html gzip 541 B 540 B N/A
withRouter.html gzip 525 B 522 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js hrmny/pack-2243-fix-rsc-react-dom-server Change
edge-ssr.js gzip 94.4 kB 94.4 kB N/A
page.js gzip 151 kB 151 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js hrmny/pack-2243-fix-rsc-react-dom-server Change
middleware-b..fest.js gzip 624 B 625 B N/A
middleware-r..fest.js gzip 151 B 151 B
middleware.js gzip 44.4 kB 44.4 kB N/A
edge-runtime..pack.js gzip 1.94 kB 1.94 kB
Overall change 2.1 kB 2.1 kB
Next Runtimes
vercel/next.js canary vercel/next.js hrmny/pack-2243-fix-rsc-react-dom-server Change
app-page-exp...dev.js gzip 166 kB 166 kB
app-page-exp..prod.js gzip 95.5 kB 95.5 kB
app-page-tur..prod.js gzip 97.2 kB 97.2 kB
app-page-tur..prod.js gzip 91.7 kB 91.7 kB
app-page.run...dev.js gzip 136 kB 136 kB
app-page.run..prod.js gzip 90.2 kB 90.2 kB
app-route-ex...dev.js gzip 22 kB 22 kB
app-route-ex..prod.js gzip 14.9 kB 14.9 kB
app-route-tu..prod.js gzip 14.9 kB 14.9 kB
app-route-tu..prod.js gzip 14.6 kB 14.6 kB
app-route.ru...dev.js gzip 21.7 kB 21.7 kB
app-route.ru..prod.js gzip 14.6 kB 14.6 kB
pages-api-tu..prod.js gzip 9.43 kB 9.43 kB
pages-api.ru...dev.js gzip 9.7 kB 9.7 kB
pages-api.ru..prod.js gzip 9.43 kB 9.43 kB
pages-turbo...prod.js gzip 22 kB 22 kB
pages.runtim...dev.js gzip 22.7 kB 22.7 kB
pages.runtim..prod.js gzip 22 kB 22 kB
server.runti..prod.js gzip 50 kB 50 kB
Overall change 925 kB 925 kB
build cache
vercel/next.js canary vercel/next.js hrmny/pack-2243-fix-rsc-react-dom-server Change
0.pack gzip 1.55 MB 1.55 MB N/A
index.pack gzip 104 kB 104 kB N/A
Overall change 0 B 0 B
Commit: 7d1b625

@ForsakenHarmony ForsakenHarmony marked this pull request as ready for review January 26, 2024 11:53
@ForsakenHarmony ForsakenHarmony force-pushed the hrmny/pack-2243-fix-rsc-react-dom-server branch from aa620aa to 11a6628 Compare February 12, 2024 22:56
@ijjk
Copy link
Member

ijjk commented Feb 12, 2024

Tests Passed

@ForsakenHarmony ForsakenHarmony force-pushed the hrmny/pack-2243-fix-rsc-react-dom-server branch from 11a6628 to 7d1b625 Compare February 14, 2024 14:04
@ForsakenHarmony
Copy link
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @ForsakenHarmony and the rest of your teammates on Graphite Graphite

@ForsakenHarmony ForsakenHarmony merged commit f336bd6 into canary Feb 14, 2024
71 checks passed
@ForsakenHarmony ForsakenHarmony deleted the hrmny/pack-2243-fix-rsc-react-dom-server branch February 14, 2024 19:14
@sebmarkbage
Copy link
Contributor

sebmarkbage commented Feb 16, 2024

This is not correct. react-dom/server is not supposed to work in the RSC context and we're adding more protections against it.

https://github.com/facebook/react/pull/28271/files#r1491806641

It'll probably start erroring at runtime anyway because the implementation between the RSC version of "react" doesn't work with react-dom/server.

react-dom/server renders a tree of Client Components but there's no Client Components in an RSC layer. It needs to be rendered into an RSC stream and then SSR:ed in another layer that has the Client Components.

@sebmarkbage
Copy link
Contributor

The fix here is that we must unfortunately break Resend even outside Turbopack.

@sebmarkbage
Copy link
Contributor

Also isn't the fix here aliasing all of "react" to the non-RSC version which should break all of RSC so I'm not sure how this isn't just breaking everything. Probably should make sure it does.

@github-actions github-actions bot added the locked label Mar 1, 2024
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 1, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
created-by: Turbopack team PRs by the Turbopack team. locked Turbopack Related to Turbopack with Next.js. type: next
Projects
None yet
Development

Successfully merging this pull request may close these issues.

TypeError: Cannot read properties of undefined (reading 'current') when adding --turbo
4 participants