-
Notifications
You must be signed in to change notification settings - Fork 27.5k
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
Split entrypoint/route handling into separate dev and prod versions #75169
base: canary
Are you sure you want to change the base?
Conversation
4c98342
to
4f3128a
Compare
4f3128a
to
5b0fbd6
Compare
Failing test suitesCommit: 7eb1d8a
Expand output● production mode › loads a middleware
Read more about building and testing Next.js in contributing.md.
Expand output● app-dir - draft-mode-middleware › should be able to enable draft mode with middleware present
● app-dir - draft-mode-middleware › should be able to disable draft mode with middleware present
Read more about building and testing Next.js in contributing.md.
Expand output● rewrite-headers › middleware rewrite RSC (/hello/wyatt) › should have the expected headers
● rewrite-headers › middleware rewrite Prefetch RSC (/hello/wyatt) › should have the expected headers
● rewrite-headers › middleware rewrite dynamic RSC (/hello/bob) › should have the expected headers
● rewrite-headers › middleware rewrite dynamic Prefetch RSC (/hello/bob) › should have the expected headers
● rewrite-headers › middleware rewrite query RSC (/hello/john) › should have the expected headers
● rewrite-headers › middleware rewrite query Prefetch RSC (/hello/john) › should have the expected headers
Read more about building and testing Next.js in contributing.md.
Expand output● middleware-sitemap › should not be affected by middleware if sitemap.xml is excluded from the matcher
Read more about building and testing Next.js in contributing.md.
Expand output● dynamic-io › should produce dynamic pages when using async or sync headers
● dynamic-io › should be able to access headers properties asynchronously
● dynamic-io › should be able to access headers properties synchronously
Read more about building and testing Next.js in contributing.md.
Expand output● middleware-sitemap › should be affected by middleware for sitemap.xml if there is no matcher
Read more about building and testing Next.js in contributing.md.
Expand output● app dir - hooks › useSelectedLayoutSegments › should have the correct layout segments at /hooks/use-selected-layout-segment/rewritten-middleware
Read more about building and testing Next.js in contributing.md.
Expand output● Edge runtime code with imports › test error if response is not Response type › production mode › Middleware build test Response
Read more about building and testing Next.js in contributing.md.
Expand output● Dynamic Routing › production mode › should have correct cache entries on prefetch
Read more about building and testing Next.js in contributing.md.
Expand output● Edge runtime code with imports › Middleware dynamically importing 3rd party module › production mode › does not build and reports module not found error
● Edge runtime code with imports › Middleware importing unused 3rd party module › production mode › does not build and reports module not found error
Read more about building and testing Next.js in contributing.md.
Expand output● x-forwarded-headers › should include x-forwarded-* headers
● x-forwarded-headers › host header exists › should include x-forwarded-* headers relative to host
● x-forwarded-headers › already assigned › should not override existing x-forwarded-* headers
Read more about building and testing Next.js in contributing.md.
Expand output● Edge runtime code with imports › Middleware dynamically importing node.js module › production mode › throws unsupported module error in production at runtime and prints error on logs
● Edge runtime code with imports › Middleware dynamically importing node.js module in a lib › production mode › throws unsupported module error in production at runtime and prints error on logs
● Edge runtime code with imports › Middleware statically importing 3rd party module › production mode › does not build and reports
● Edge runtime code with imports › Middleware using Buffer polyfill › production mode › does not throw in production at runtime
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 wbinnssmith/split-handle-endpoints | Change | |
---|---|---|---|
buildDuration | 19.3s | 16.6s | N/A |
buildDurationCached | 15.6s | 13.2s | N/A |
nodeModulesSize | 418 MB | 418 MB | |
nextStartRea..uration (ms) | 411ms | 426ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | vercel/next.js wbinnssmith/split-handle-endpoints | 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.46 kB | 5.46 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.6 kB | 34.6 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 wbinnssmith/split-handle-endpoints | 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 wbinnssmith/split-handle-endpoints | 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.59 kB | 4.58 kB | N/A |
index-HASH.js gzip | 268 B | 268 B | ✓ |
link-HASH.js gzip | 2.35 kB | 2.35 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 wbinnssmith/split-handle-endpoints | Change | |
---|---|---|---|
_buildManifest.js gzip | 748 B | 747 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vercel/next.js wbinnssmith/split-handle-endpoints | Change | |
---|---|---|---|
index.html gzip | 524 B | 523 B | N/A |
link.html gzip | 540 B | 538 B | N/A |
withRouter.html gzip | 520 B | 520 B | ✓ |
Overall change | 520 B | 520 B | ✓ |
Edge SSR bundle Size
vercel/next.js canary | vercel/next.js wbinnssmith/split-handle-endpoints | 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 wbinnssmith/split-handle-endpoints | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 670 B | 664 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
vercel/next.js canary | vercel/next.js wbinnssmith/split-handle-endpoints | 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 | 375 kB | 375 kB | ✓ |
app-page-exp..prod.js gzip | 130 kB | 130 kB | ✓ |
app-page-tur..prod.js gzip | 143 kB | 143 kB | ✓ |
app-page-tur..prod.js gzip | 139 kB | 139 kB | ✓ |
app-page.run...dev.js gzip | 363 kB | 363 kB | ✓ |
app-page.run..prod.js gzip | 126 kB | 126 kB | ✓ |
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 | 2.47 MB | 2.47 MB | ✓ |
build cache Overall increase ⚠️
vercel/next.js canary | vercel/next.js wbinnssmith/split-handle-endpoints | Change | |
---|---|---|---|
0.pack gzip | 2.1 MB | 2.1 MB | |
index.pack gzip | 74.7 kB | 74.3 kB | N/A |
Overall change | 2.1 MB | 2.1 MB |
Diff details
Diff for main-HASH.js
Diff too large to display
Currently, for `handleEntrypoints`, `handlePagesErrorRoute`, `handleRouteType`, etc, both dev and prod use cases are combined into the same functions. This leads to a lot of branching, use-case-specific arguments, etc. for minimal opportunity for shared code. In a following PR, entrypoint writing for prod will be done through a single napi call to rust, further branching the two versions. This splits them formally, at the cost of duplicating a handful of lines in each case. Perhaps in the future we can develop a better system for sharing code, but this makes things far clearer and easier to maintain in this moment. Test Plan: CI
5b0fbd6
to
7eb1d8a
Compare
Currently, for
handleEntrypoints
,handlePagesErrorRoute
,handleRouteType
, etc, both dev and prod use cases are combined into the same functions. This leads to a lot of branching, use-case-specific arguments, etc. for minimal opportunity for shared code.In a following PR, entrypoint writing for prod will be done through a single napi call to rust, further branching the two versions.
This splits them formally, at the cost of duplicating a handful of lines in each case. Perhaps in the future we can develop a better system for sharing code, but this makes things far clearer and easier to maintain in this moment.
Test Plan: CI