-
Notifications
You must be signed in to change notification settings - Fork 27.8k
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
feature(error): capture ssr error in overlay during dev #74983
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Failing test suitesCommit: a69f67c
Expand output● ssr-only-error › should show ssr only error in error overlay
● ssr-only-error › should show ssr only error in error overlay
Read more about building and testing Next.js in contributing.md. |
Stats from current PRDefault Build (Increase detected
|
vercel/next.js canary | vercel/next.js huozhi/01-16-handle_ssr_only_error | Change | |
---|---|---|---|
buildDuration | 17.1s | 15.2s | N/A |
buildDurationCached | 14.4s | 12.2s | N/A |
nodeModulesSize | 418 MB | 418 MB | |
nextStartRea..uration (ms) | 418ms | 415ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | vercel/next.js huozhi/01-16-handle_ssr_only_error | Change | |
---|---|---|---|
5306-HASH.js gzip | 54 kB | 54 kB | N/A |
8276.HASH.js gzip | 169 B | 168 B | N/A |
8377-HASH.js gzip | 5.44 kB | 5.44 kB | N/A |
bccd1874-HASH.js gzip | 52.9 kB | 52.9 kB | ✓ |
framework-HASH.js gzip | 57.5 kB | 57.5 kB | N/A |
main-app-HASH.js gzip | 240 B | 242 B | N/A |
main-HASH.js gzip | 34.4 kB | 34.4 kB | N/A |
webpack-HASH.js gzip | 1.71 kB | 1.71 kB | N/A |
Overall change | 52.9 kB | 52.9 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | vercel/next.js huozhi/01-16-handle_ssr_only_error | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 39.4 kB | 39.4 kB | ✓ |
Overall change | 39.4 kB | 39.4 kB | ✓ |
Client Pages
vercel/next.js canary | vercel/next.js huozhi/01-16-handle_ssr_only_error | Change | |
---|---|---|---|
_app-HASH.js gzip | 193 B | 193 B | ✓ |
_error-HASH.js gzip | 193 B | 193 B | ✓ |
amp-HASH.js gzip | 512 B | 510 B | N/A |
css-HASH.js gzip | 343 B | 342 B | N/A |
dynamic-HASH.js gzip | 1.84 kB | 1.84 kB | ✓ |
edge-ssr-HASH.js gzip | 265 B | 265 B | ✓ |
head-HASH.js gzip | 363 B | 362 B | N/A |
hooks-HASH.js gzip | 393 B | 392 B | N/A |
image-HASH.js gzip | 4.57 kB | 4.57 kB | N/A |
index-HASH.js gzip | 268 B | 268 B | ✓ |
link-HASH.js gzip | 2.35 kB | 2.34 kB | N/A |
routerDirect..HASH.js gzip | 328 B | 328 B | ✓ |
script-HASH.js gzip | 397 B | 397 B | ✓ |
withRouter-HASH.js gzip | 323 B | 326 B | N/A |
1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
Overall change | 3.59 kB | 3.59 kB | ✓ |
Client Build Manifests
vercel/next.js canary | vercel/next.js huozhi/01-16-handle_ssr_only_error | Change | |
---|---|---|---|
_buildManifest.js gzip | 749 B | 747 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vercel/next.js huozhi/01-16-handle_ssr_only_error | Change | |
---|---|---|---|
index.html gzip | 524 B | 524 B | ✓ |
link.html gzip | 538 B | 538 B | ✓ |
withRouter.html gzip | 519 B | 521 B | N/A |
Overall change | 1.06 kB | 1.06 kB | ✓ |
Edge SSR bundle Size
vercel/next.js canary | vercel/next.js huozhi/01-16-handle_ssr_only_error | Change | |
---|---|---|---|
edge-ssr.js gzip | 129 kB | 129 kB | N/A |
page.js gzip | 208 kB | 208 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Middleware size
vercel/next.js canary | vercel/next.js huozhi/01-16-handle_ssr_only_error | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 669 B | 667 B | N/A |
middleware-r..fest.js gzip | 155 B | 156 B | N/A |
middleware.js gzip | 31.3 kB | 31.3 kB | N/A |
edge-runtime..pack.js gzip | 844 B | 844 B | ✓ |
Overall change | 844 B | 844 B | ✓ |
Next Runtimes Overall increase ⚠️
vercel/next.js canary | vercel/next.js huozhi/01-16-handle_ssr_only_error | Change | |
---|---|---|---|
274-experime...dev.js gzip | 322 B | 322 B | ✓ |
274.runtime.dev.js gzip | 314 B | 314 B | ✓ |
app-page-exp...dev.js gzip | 374 kB | 374 kB | |
app-page-exp..prod.js gzip | 130 kB | 130 kB | N/A |
app-page-tur..prod.js gzip | 143 kB | 143 kB | N/A |
app-page-tur..prod.js gzip | 139 kB | 139 kB | N/A |
app-page.run...dev.js gzip | 362 kB | 362 kB | |
app-page.run..prod.js gzip | 126 kB | 126 kB | N/A |
app-route-ex...dev.js gzip | 37.6 kB | 37.6 kB | ✓ |
app-route-ex..prod.js gzip | 25.6 kB | 25.6 kB | ✓ |
app-route-tu..prod.js gzip | 25.6 kB | 25.6 kB | ✓ |
app-route-tu..prod.js gzip | 25.4 kB | 25.4 kB | ✓ |
app-route.ru...dev.js gzip | 39.2 kB | 39.2 kB | ✓ |
app-route.ru..prod.js gzip | 25.4 kB | 25.4 kB | ✓ |
pages-api-tu..prod.js gzip | 9.69 kB | 9.69 kB | ✓ |
pages-api.ru...dev.js gzip | 11.6 kB | 11.6 kB | ✓ |
pages-api.ru..prod.js gzip | 9.68 kB | 9.68 kB | ✓ |
pages-turbo...prod.js gzip | 21.9 kB | 21.9 kB | ✓ |
pages.runtim...dev.js gzip | 27.7 kB | 27.7 kB | ✓ |
pages.runtim..prod.js gzip | 21.9 kB | 21.9 kB | ✓ |
server.runti..prod.js gzip | 916 kB | 916 kB | ✓ |
Overall change | 1.93 MB | 1.93 MB |
build cache Overall increase ⚠️
vercel/next.js canary | vercel/next.js huozhi/01-16-handle_ssr_only_error | Change | |
---|---|---|---|
0.pack gzip | 2.1 MB | 2.09 MB | N/A |
index.pack gzip | 74.4 kB | 75.5 kB | |
Overall change | 74.4 kB | 75.5 kB |
Diff details
Diff for 5306-HASH.js
Diff too large to display
Diff for main-HASH.js
Diff too large to display
Diff for app-page-exp..ntime.dev.js
Diff too large to display
Diff for app-page-exp..time.prod.js
Diff too large to display
Diff for app-page-tur..time.prod.js
Diff too large to display
Diff for app-page-tur..time.prod.js
Diff too large to display
Diff for app-page.runtime.dev.js
Diff too large to display
Diff for app-page.runtime.prod.js
Diff too large to display
615483e
to
3c9a850
Compare
afbf439
to
90180a7
Compare
a69f67c
to
a59a806
Compare
@@ -229,6 +230,16 @@ function Root({ children }: React.PropsWithChildren<{}>) { | |||
}, []) | |||
} | |||
|
|||
if (process.env.NODE_ENV !== 'production') { | |||
const ssrError = devQueueSsrError() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This doesn't really work. You're reading a mutable source during render. Why do we need to read these from the DOM instead of passing the data around?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see now. I guess we're never re-rendering the <template>
and assume it's already there when we render here? Should still move the read into the effect though
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
that would be late and we can't get the error.
What
When there's an SSR only error occured but browser client is all good, for example:
In this case, we did logged the error in the terminal but the errors are not presented to users. So we developed a way that, when we find a SSR error, excluding the RSC one, we'll wrap it up as a hidden
template
tag in error html body and send to client during development. On client we can consume that serialized error fromtemplate
attributes and report to dev overlay. It will be in an uninterruptive way that users can still see it, but not block on viewing the client rendered page.Closes NDX-670