enable esmodule optimizations for css modules#62639
enable esmodule optimizations for css modules#62639jantimon wants to merge 6 commits intovercel:canaryfrom
Conversation
|
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
|
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
Failing test suitesCommit: 480042f
Expand output● CSS Module client-side navigation › production mode › should be able to client-side navigate from red to blue ● CSS Module client-side navigation › production mode › should be able to client-side navigate from blue to red ● CSS Module client-side navigation › production mode › should be able to client-side navigate from none to red ● CSS Module client-side navigation › production mode › should be able to client-side navigate from none to blue Read more about building and testing Next.js in contributing.md.
Expand output● app dir - next/dynamic › should handle next/dynamic in hydration correctly Read more about building and testing Next.js in contributing.md.
Expand output● Basic SCSS Module Support › production mode › should have compiled successfully Read more about building and testing Next.js in contributing.md.
Expand output● CSS Module Composes Usage (Basic) › production mode › should have compiled successfully Read more about building and testing Next.js in contributing.md.
Expand output● Has CSS Module in computed styles in Production › production mode › should have compiled successfully Read more about building and testing Next.js in contributing.md.
Expand output● not-found app dir css › should load css while navigation between not-found and page Read more about building and testing Next.js in contributing.md.
Expand output● Basic CSS Module Support › production mode › should have compiled successfully ● 3rd Party CSS Module Support › production mode › should have compiled successfully ● Has CSS Module in computed styles in Production › production mode › should have compiled successfully ● CSS Module Composes Usage (Basic) › production mode › should have compiled successfully ● CSS Module Composes Usage (External) › production mode › should have compiled successfully Read more about building and testing Next.js in contributing.md.
Expand output● 3rd Party CSS Module Support › production mode › should have compiled successfully Read more about building and testing Next.js in contributing.md.
Expand output● app-dir - errors › error component › should trigger error component when an error happens during rendering Read more about building and testing Next.js in contributing.md. |
|
Looks like there're some failing tests 👀 |
|
thank you - I will take a look :) |
Stats from current PRDefault BuildGeneral Overall increase
|
| vercel/next.js canary | jantimon/next.js optimize-module-selector-bundling | Change | |
|---|---|---|---|
| buildDuration | 16s | 16.1s | N/A |
| buildDurationCached | 8.8s | 7.5s | N/A |
| nodeModulesSize | 199 MB | 199 MB | |
| nextStartRea..uration (ms) | 434ms | 418ms | N/A |
Client Bundles (main, webpack)
| vercel/next.js canary | jantimon/next.js optimize-module-selector-bundling | Change | |
|---|---|---|---|
| 2453-HASH.js gzip | 31.4 kB | 31.4 kB | N/A |
| 3304.HASH.js gzip | 181 B | 181 B | ✓ |
| 3f784ff6-HASH.js gzip | 53.7 kB | 53.7 kB | ✓ |
| 8299-HASH.js gzip | 5.1 kB | 5.1 kB | N/A |
| framework-HASH.js gzip | 45.2 kB | 45.2 kB | ✓ |
| main-app-HASH.js gzip | 242 B | 240 B | N/A |
| main-HASH.js gzip | 32.2 kB | 32.2 kB | N/A |
| webpack-HASH.js gzip | 1.68 kB | 1.68 kB | N/A |
| Overall change | 99 kB | 99 kB | ✓ |
Legacy Client Bundles (polyfills)
| vercel/next.js canary | jantimon/next.js optimize-module-selector-bundling | Change | |
|---|---|---|---|
| polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
| Overall change | 31 kB | 31 kB | ✓ |
Client Pages
| vercel/next.js canary | jantimon/next.js optimize-module-selector-bundling | Change | |
|---|---|---|---|
| _app-HASH.js gzip | 196 B | 197 B | N/A |
| _error-HASH.js gzip | 184 B | 184 B | ✓ |
| amp-HASH.js gzip | 505 B | 505 B | ✓ |
| css-HASH.js gzip | 324 B | 325 B | N/A |
| dynamic-HASH.js gzip | 2.5 kB | 2.5 kB | N/A |
| edge-ssr-HASH.js gzip | 258 B | 258 B | ✓ |
| head-HASH.js gzip | 352 B | 352 B | ✓ |
| hooks-HASH.js gzip | 370 B | 371 B | N/A |
| image-HASH.js gzip | 4.27 kB | 4.27 kB | ✓ |
| index-HASH.js gzip | 259 B | 259 B | ✓ |
| link-HASH.js gzip | 2.67 kB | 2.67 kB | N/A |
| routerDirect..HASH.js gzip | 314 B | 312 B | N/A |
| script-HASH.js gzip | 386 B | 386 B | ✓ |
| withRouter-HASH.js gzip | 309 B | 309 B | ✓ |
| 1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
| Overall change | 6.63 kB | 6.63 kB | ✓ |
Client Build Manifests
| vercel/next.js canary | jantimon/next.js optimize-module-selector-bundling | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 483 B | 485 B | N/A |
| Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
| vercel/next.js canary | jantimon/next.js optimize-module-selector-bundling | Change | |
|---|---|---|---|
| index.html gzip | 529 B | 527 B | N/A |
| link.html gzip | 541 B | 540 B | N/A |
| withRouter.html gzip | 524 B | 522 B | N/A |
| Overall change | 0 B | 0 B | ✓ |
Edge SSR bundle Size
| vercel/next.js canary | jantimon/next.js optimize-module-selector-bundling | Change | |
|---|---|---|---|
| edge-ssr.js gzip | 95.6 kB | 95.6 kB | N/A |
| page.js gzip | 3.06 kB | 3.06 kB | N/A |
| Overall change | 0 B | 0 B | ✓ |
Middleware size
| vercel/next.js canary | jantimon/next.js optimize-module-selector-bundling | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 624 B | 626 B | N/A |
| middleware-r..fest.js gzip | 155 B | 156 B | N/A |
| middleware.js gzip | 25.5 kB | 25.5 kB | N/A |
| edge-runtime..pack.js gzip | 839 B | 839 B | ✓ |
| Overall change | 839 B | 839 B | ✓ |
Next Runtimes
| vercel/next.js canary | jantimon/next.js optimize-module-selector-bundling | Change | |
|---|---|---|---|
| app-page-exp...dev.js gzip | 171 kB | 171 kB | ✓ |
| app-page-exp..prod.js gzip | 97.5 kB | 97.5 kB | ✓ |
| app-page-tur..prod.js gzip | 99.2 kB | 99.2 kB | ✓ |
| app-page-tur..prod.js gzip | 93.5 kB | 93.5 kB | ✓ |
| app-page.run...dev.js gzip | 145 kB | 145 kB | ✓ |
| app-page.run..prod.js gzip | 92 kB | 92 kB | ✓ |
| app-route-ex...dev.js gzip | 21.4 kB | 21.4 kB | ✓ |
| app-route-ex..prod.js gzip | 15.2 kB | 15.2 kB | ✓ |
| app-route-tu..prod.js gzip | 15.2 kB | 15.2 kB | ✓ |
| app-route-tu..prod.js gzip | 14.9 kB | 14.9 kB | ✓ |
| app-route.ru...dev.js gzip | 21.1 kB | 21.1 kB | ✓ |
| app-route.ru..prod.js gzip | 14.9 kB | 14.9 kB | ✓ |
| pages-api-tu..prod.js gzip | 9.55 kB | 9.55 kB | ✓ |
| pages-api.ru...dev.js gzip | 9.82 kB | 9.82 kB | ✓ |
| pages-api.ru..prod.js gzip | 9.55 kB | 9.55 kB | ✓ |
| pages-turbo...prod.js gzip | 22.5 kB | 22.5 kB | ✓ |
| pages.runtim...dev.js gzip | 23.1 kB | 23.1 kB | ✓ |
| pages.runtim..prod.js gzip | 22.5 kB | 22.5 kB | ✓ |
| server.runti..prod.js gzip | 51.3 kB | 51.3 kB | ✓ |
| Overall change | 948 kB | 948 kB | ✓ |
build cache
| vercel/next.js canary | jantimon/next.js optimize-module-selector-bundling | Change | |
|---|---|---|---|
| 0.pack gzip | 1.59 MB | 1.58 MB | N/A |
| index.pack gzip | 107 kB | 107 kB | N/A |
| Overall change | 0 B | 0 B | ✓ |
Diff details
Diff for middleware.js
Diff too large to display
|
|
possible solution (in mini-css-extract-plugin) webpack/mini-css-extract-plugin#1084 |
|
There might be a problem for this case too: |
|
I guess this should probably behind an experimental flag. |
Good catch - added the experimental flag. |
Reproduction example https://github.com/jantimon/reproduction-nextjs-module-css-optimization
Reproduction Steps
Patch
As you can see, the size of the first load JS is reduced by ~100 bytes.
For a larger project, this would be more significant.
Patch:
Fixes #62637