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(next@15): use the asset prefix when loading a CSS in App Router #72095

Merged
merged 5 commits into from
Dec 12, 2024

Conversation

noreiller
Copy link
Contributor

@noreiller noreiller commented Oct 30, 2024

What

This PR fixes a bug when using next@15, next/dynamic and assetPrefix config in App Router.

Why

The current behavior loads the CSS with only the pathname and so, it results with a 404.

How

The new behavior uses the full url of the asset.

Fixes #72470

@ijjk
Copy link
Member

ijjk commented Oct 30, 2024

Allow CI Workflow Run

  • approve CI run for commit: 761a02c

Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer

@noreiller noreiller changed the title fix(next): use the asset prefix when loading a CSS in App Router fix(next@15): use the asset prefix when loading a CSS in App Router Oct 30, 2024
@ijjk
Copy link
Member

ijjk commented Oct 30, 2024

Tests Passed

@ijjk
Copy link
Member

ijjk commented Oct 30, 2024

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary noreiller/next.js fix-dynamic-css-with-asset-prefix Change
buildDuration 18.6s 15.6s N/A
buildDurationCached 14.7s 12.3s N/A
nodeModulesSize 410 MB 410 MB ⚠️ +1.05 kB
nextStartRea..uration (ms) 468ms 467ms N/A
Client Bundles (main, webpack)
vercel/next.js canary noreiller/next.js fix-dynamic-css-with-asset-prefix Change
1187-HASH.js gzip 50.8 kB 50.8 kB N/A
8276.HASH.js gzip 169 B 168 B N/A
8377-HASH.js gzip 5.36 kB 5.36 kB N/A
bccd1874-HASH.js gzip 53 kB 53 kB N/A
framework-HASH.js gzip 57.5 kB 57.5 kB N/A
main-app-HASH.js gzip 232 B 235 B N/A
main-HASH.js gzip 34 kB 34 kB N/A
webpack-HASH.js gzip 1.71 kB 1.71 kB N/A
Overall change 0 B 0 B
Legacy Client Bundles (polyfills)
vercel/next.js canary noreiller/next.js fix-dynamic-css-with-asset-prefix 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 noreiller/next.js fix-dynamic-css-with-asset-prefix 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.49 kB 4.49 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 noreiller/next.js fix-dynamic-css-with-asset-prefix Change
_buildManifest.js gzip 747 B 746 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary noreiller/next.js fix-dynamic-css-with-asset-prefix Change
index.html gzip 524 B 522 B N/A
link.html gzip 539 B 537 B N/A
withRouter.html gzip 520 B 519 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size
vercel/next.js canary noreiller/next.js fix-dynamic-css-with-asset-prefix Change
edge-ssr.js gzip 128 kB 128 kB N/A
page.js gzip 203 kB 203 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary noreiller/next.js fix-dynamic-css-with-asset-prefix Change
middleware-b..fest.js gzip 671 B 666 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 31.2 kB 31.2 kB N/A
edge-runtime..pack.js gzip 844 B 844 B
Overall change 844 B 844 B
Next Runtimes
vercel/next.js canary noreiller/next.js fix-dynamic-css-with-asset-prefix Change
523-experime...dev.js gzip 322 B 322 B
523.runtime.dev.js gzip 314 B 314 B
app-page-exp...dev.js gzip 323 kB 323 kB
app-page-exp..prod.js gzip 127 kB 127 kB
app-page-tur..prod.js gzip 140 kB 140 kB
app-page-tur..prod.js gzip 135 kB 135 kB
app-page.run...dev.js gzip 313 kB 313 kB
app-page.run..prod.js gzip 123 kB 123 kB
app-route-ex...dev.js gzip 37.3 kB 37.3 kB
app-route-ex..prod.js gzip 25.4 kB 25.4 kB
app-route-tu..prod.js gzip 25.4 kB 25.4 kB
app-route-tu..prod.js gzip 25.2 kB 25.2 kB
app-route.ru...dev.js gzip 38.9 kB 38.9 kB
app-route.ru..prod.js gzip 25.2 kB 25.2 kB
pages-api-tu..prod.js gzip 9.67 kB 9.67 kB
pages-api.ru...dev.js gzip 11.6 kB 11.6 kB
pages-api.ru..prod.js gzip 9.66 kB 9.66 kB
pages-turbo...prod.js gzip 21.7 kB 21.7 kB
pages.runtim...dev.js gzip 27.4 kB 27.4 kB
pages.runtim..prod.js gzip 21.7 kB 21.7 kB
server.runti..prod.js gzip 916 kB 916 kB
Overall change 2.36 MB 2.36 MB
build cache Overall increase ⚠️
vercel/next.js canary noreiller/next.js fix-dynamic-css-with-asset-prefix Change
0.pack gzip 2.05 MB 2.05 MB ⚠️ +3.63 kB
index.pack gzip 72.6 kB 71.4 kB N/A
Overall change 2.05 MB 2.05 MB ⚠️ +3.63 kB
Diff details
Diff for main-HASH.js

Diff too large to display

Commit: 7992f33

@noreiller noreiller force-pushed the fix-dynamic-css-with-asset-prefix branch 3 times, most recently from 6651e4d to c86a2ac Compare November 6, 2024 10:29
@noreiller
Copy link
Contributor Author

noreiller commented Nov 7, 2024

It seems to be fixed in next@15.0.2.

Update: false positive in my application where I encountered the issue.

@noreiller noreiller closed this Nov 7, 2024
@noreiller noreiller deleted the fix-dynamic-css-with-asset-prefix branch November 7, 2024 13:48
@noreiller noreiller restored the fix-dynamic-css-with-asset-prefix branch November 7, 2024 16:30
@noreiller noreiller reopened this Nov 7, 2024
@noreiller noreiller force-pushed the fix-dynamic-css-with-asset-prefix branch from c86a2ac to d0a7744 Compare November 7, 2024 16:31
@noreiller noreiller force-pushed the fix-dynamic-css-with-asset-prefix branch from d0a7744 to 07d4a73 Compare November 14, 2024 19:29
noreiller and others added 2 commits December 11, 2024 07:40
The current behavior loads the CSS with only the pathname and so, it results with a 404.

The new behavior uses the full url of the asset.
Co-authored-by: Tobias Koppers <tobias.koppers@googlemail.com>
@noreiller noreiller force-pushed the fix-dynamic-css-with-asset-prefix branch from cc58d74 to 619a7e6 Compare December 11, 2024 06:40
@vercel vercel deleted a comment from ijjk Dec 11, 2024
@vercel vercel deleted a comment from ijjk Dec 11, 2024
Comment on lines +622 to +626
_N_E_STYLE_LOAD(
href.indexOf(window.location.origin) === 0
? new URL(href).pathname
: href
).then(
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sokra @ijjk I updated the fix to avoid a regression when the assetPrefix config is not used. I used the same kind of check than in the MiniCssExtractPlugin webpack plugin.

@ijjk ijjk merged commit cfe66e7 into vercel:canary Dec 12, 2024
86 checks passed
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Dec 27, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

CSS not loaded correctly in next@15 when using assetPrefix and next/dynamic
4 participants