-
Notifications
You must be signed in to change notification settings - Fork 27.2k
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 barrel optimization to ignore layers #59254
Conversation
Tests Passed |
Stats from current PRDefault BuildGeneral Overall increase
|
vercel/next.js canary | vercel/next.js shu/14f6 | Change | |
---|---|---|---|
buildDuration | 10.3s | 10.4s | |
buildDurationCached | 6s | 5.9s | N/A |
nodeModulesSize | 199 MB | 199 MB | |
nextStartRea..uration (ms) | 420ms | 424ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | vercel/next.js shu/14f6 | Change | |
---|---|---|---|
199-HASH.js gzip | 30.6 kB | 30.6 kB | ✓ |
3f784ff6-HASH.js gzip | 53.3 kB | 53.3 kB | ✓ |
494.HASH.js gzip | 180 B | 185 B | N/A |
framework-HASH.js gzip | 45.2 kB | 45.2 kB | ✓ |
main-app-HASH.js gzip | 241 B | 241 B | ✓ |
main-HASH.js gzip | 31.7 kB | 31.7 kB | N/A |
webpack-HASH.js gzip | 1.7 kB | 1.7 kB | N/A |
Overall change | 129 kB | 129 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | vercel/next.js shu/14f6 | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
Overall change | 31 kB | 31 kB | ✓ |
Client Pages
vercel/next.js canary | vercel/next.js shu/14f6 | Change | |
---|---|---|---|
_app-HASH.js gzip | 194 B | 194 B | ✓ |
_error-HASH.js gzip | 182 B | 182 B | ✓ |
amp-HASH.js gzip | 501 B | 501 B | ✓ |
css-HASH.js gzip | 322 B | 321 B | N/A |
dynamic-HASH.js gzip | 2.5 kB | 2.5 kB | N/A |
edge-ssr-HASH.js gzip | 253 B | 255 B | N/A |
head-HASH.js gzip | 348 B | 350 B | N/A |
hooks-HASH.js gzip | 369 B | 369 B | ✓ |
image-HASH.js gzip | 4.27 kB | 4.27 kB | N/A |
index-HASH.js gzip | 256 B | 256 B | ✓ |
link-HASH.js gzip | 2.61 kB | 2.6 kB | N/A |
routerDirect..HASH.js gzip | 311 B | 309 B | N/A |
script-HASH.js gzip | 384 B | 384 B | ✓ |
withRouter-HASH.js gzip | 307 B | 306 B | N/A |
1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
Overall change | 1.99 kB | 1.99 kB | ✓ |
Client Build Manifests
vercel/next.js canary | vercel/next.js shu/14f6 | Change | |
---|---|---|---|
_buildManifest.js gzip | 484 B | 483 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vercel/next.js shu/14f6 | Change | |
---|---|---|---|
index.html gzip | 528 B | 529 B | N/A |
link.html gzip | 539 B | 541 B | N/A |
withRouter.html gzip | 524 B | 524 B | ✓ |
Overall change | 524 B | 524 B | ✓ |
Edge SSR bundle Size
vercel/next.js canary | vercel/next.js shu/14f6 | Change | |
---|---|---|---|
edge-ssr.js gzip | 93.7 kB | 93.7 kB | N/A |
page.js gzip | 146 kB | 146 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Middleware size
vercel/next.js canary | vercel/next.js shu/14f6 | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 627 B | 624 B | N/A |
middleware-r..fest.js gzip | 150 B | 151 B | N/A |
middleware.js gzip | 37.5 kB | 37.5 kB | N/A |
edge-runtime..pack.js gzip | 1.92 kB | 1.92 kB | ✓ |
Overall change | 1.92 kB | 1.92 kB | ✓ |
Next Runtimes
vercel/next.js canary | vercel/next.js shu/14f6 | Change | |
---|---|---|---|
app-page-exp...dev.js gzip | 168 kB | 168 kB | ✓ |
app-page-exp..prod.js gzip | 93.8 kB | 93.8 kB | ✓ |
app-page-tur..prod.js gzip | 94.5 kB | 94.5 kB | ✓ |
app-page-tur..prod.js gzip | 89.1 kB | 89.1 kB | ✓ |
app-page.run...dev.js gzip | 138 kB | 138 kB | ✓ |
app-page.run..prod.js gzip | 88.4 kB | 88.4 kB | ✓ |
app-route-ex...dev.js gzip | 24.2 kB | 24.2 kB | ✓ |
app-route-ex..prod.js gzip | 16.8 kB | 16.8 kB | ✓ |
app-route-tu..prod.js gzip | 16.9 kB | 16.9 kB | ✓ |
app-route-tu..prod.js gzip | 16.4 kB | 16.4 kB | ✓ |
app-route.ru...dev.js gzip | 23.6 kB | 23.6 kB | ✓ |
app-route.ru..prod.js gzip | 16.4 kB | 16.4 kB | ✓ |
pages-api-tu..prod.js gzip | 9.37 kB | 9.37 kB | ✓ |
pages-api.ru...dev.js gzip | 9.64 kB | 9.64 kB | ✓ |
pages-api.ru..prod.js gzip | 9.37 kB | 9.37 kB | ✓ |
pages-turbo...prod.js gzip | 21.9 kB | 21.9 kB | ✓ |
pages.runtim...dev.js gzip | 22.6 kB | 22.6 kB | ✓ |
pages.runtim..prod.js gzip | 21.9 kB | 21.9 kB | ✓ |
server.runti..prod.js gzip | 49.4 kB | 49.4 kB | ✓ |
Overall change | 930 kB | 930 kB | ✓ |
This change is more tricky than I thought — will probably a bit take more time. |
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.
Nice PR!
Most of them can now be handled by `optimizePackageImports` as I manually tested them locally. The main benefit is that structural updates from these libs won't affect our internal configurations anymore, as they're automatic with the new approach. The little downside is that the automatic way is a bit slower than the `modularizeImports` config as it needs to do extra analyzation. But overall, this is a good direction. Depends on #59254.
@shuding FYR, this PR seems to introduce a new issue. Under certain condition, the following error is thrown when using
|
I have encountered the same issue, can't find a way to reproduce it... |
I also faced with same issue as above but can't find what causes it |
+1, also facing the Element type is invalid issue
|
Adding to the chorus, I just finished bisecting this same error in a project I'm working on to https://github.com/vercel/next.js/releases/tag/v14.0.4-canary.42, and this change is the most likely candidate in my mind. 🙂 My project does use [edit:] |
Because when using client components, this config doesn't take effect and the Webpack tree shaking takes over |
Thank comments above I did manage to solve the issue. In my case it was |
Fixes #57624. The recent issue was an unexpected side effect caused by 305bb01, which only affects specific packages like
@mui/material
.The problem was that the entry file of
@mui/material
has"use client"
at top, which affects the compilation result to output reference info only (when on the RSC layer), instead of keeping the original export statements. And the fix here is to ignore all layer info and React specific transforms here, as barrel optimization isn't related to all these framework features at all. To keep all directives unchanged, the SWC transform needs to parse and pass that info to the Webpack loader.This PR adds a test to ensure that
@mui/material
is working as expected (less than 1500 modules compiled). Without this feature it'll be ~2400 modules.Closes NEXT-1793, closes NEXT-1762.