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: compiler error when next/cache is used in a client module #75979

Merged
merged 2 commits into from
Feb 12, 2025

Conversation

lubieowoce
Copy link
Member

Most functions in next/cache don't work on the client, and produce confusing error messages when called there. It's better to just ban them at compile time.

NOTE: For legacy/compat reasons, we're allowing unstable_cache and unstable_noStore, since they don't currently throw when called.

@ijjk ijjk added created-by: Next.js team PRs by the Next.js team. tests Turbopack Related to Turbopack with Next.js. labels Feb 12, 2025
@lubieowoce lubieowoce changed the title fix: compiler error for next/cache usage in client modules fix: compiler error when next/cache is used in a client module Feb 12, 2025
@ijjk
Copy link
Member

ijjk commented Feb 12, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary vercel/next.js lubieowoce/ban-next-cache-in-client Change
buildDuration 22.4s 18.7s N/A
buildDurationCached 17.7s 15.1s N/A
nodeModulesSize 393 MB 393 MB
nextStartRea..uration (ms) 471ms 479ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js lubieowoce/ban-next-cache-in-client Change
5306-HASH.js gzip 55.1 kB 55.1 kB N/A
8276.HASH.js gzip 169 B 168 B N/A
8377-HASH.js gzip 5.46 kB 5.47 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 245 B 246 B N/A
main-HASH.js gzip 34.7 kB 34.7 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 vercel/next.js lubieowoce/ban-next-cache-in-client 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 lubieowoce/ban-next-cache-in-client 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.59 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 lubieowoce/ban-next-cache-in-client Change
_buildManifest.js gzip 748 B 748 B
Overall change 748 B 748 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js lubieowoce/ban-next-cache-in-client Change
index.html gzip 525 B 523 B N/A
link.html gzip 539 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 lubieowoce/ban-next-cache-in-client Change
edge-ssr.js gzip 130 kB 130 kB N/A
page.js gzip 211 kB 211 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js lubieowoce/ban-next-cache-in-client Change
middleware-b..fest.js gzip 675 B 672 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 lubieowoce/ban-next-cache-in-client Change
app-page-exp...dev.js gzip 394 kB 394 kB
app-page-exp..prod.js gzip 132 kB 132 kB
app-page-tur..prod.js gzip 145 kB 145 kB
app-page-tur..prod.js gzip 141 kB 141 kB
app-page.run...dev.js gzip 382 kB 382 kB
app-page.run..prod.js gzip 129 kB 129 kB
app-route-ex...dev.js gzip 39.4 kB 39.4 kB
app-route-ex..prod.js gzip 25.7 kB 25.7 kB
app-route-tu..prod.js gzip 25.7 kB 25.7 kB
app-route-tu..prod.js gzip 25.5 kB 25.5 kB
app-route.ru...dev.js gzip 41 kB 41 kB
app-route.ru..prod.js gzip 25.5 kB 25.5 kB
dist_client_...dev.js gzip 356 B 356 B
dist_client_...dev.js gzip 349 B 349 B
pages-api-tu..prod.js gzip 9.69 kB 9.69 kB
pages-api.ru...dev.js gzip 11.8 kB 11.8 kB
pages-api.ru..prod.js gzip 9.69 kB 9.69 kB
pages-turbo...prod.js gzip 22 kB 22 kB
pages.runtim...dev.js gzip 31.6 kB 31.6 kB
pages.runtim..prod.js gzip 22 kB 22 kB
server.runti..prod.js gzip 61.1 kB 61.1 kB
Overall change 1.67 MB 1.67 MB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js lubieowoce/ban-next-cache-in-client Change
0.pack gzip 2.11 MB 2.11 MB N/A
index.pack gzip 75.6 kB 76.1 kB ⚠️ +450 B
Overall change 75.6 kB 76.1 kB ⚠️ +450 B
Diff details
Diff for main-HASH.js

Diff too large to display

Commit: 662b04e

Copy link
Contributor

@unstubbable unstubbable left a comment

Choose a reason for hiding this comment

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

I guess adding another test to test/development/acceptance-app/rsc-build-errors.test.ts makes sense because this was already established for these kinds of errors. But personally, I'd prefer if we just added fixtures to crates/next-custom-transforms/tests/errors/react-server-components/client-graph instead. We don't need to verify for every compile error that a redbox is opened with the expected error message. In this case it's even done without asserting on the source, which we would see nicely in the output.stderr files. Running the transform tests is also much quicker than building the native binaries and running an e2e/dev test afterwards.

@ijjk
Copy link
Member

ijjk commented Feb 12, 2025

Tests Passed

@lubieowoce lubieowoce enabled auto-merge (squash) February 12, 2025 20:19
@lubieowoce lubieowoce merged commit eac707f into canary Feb 12, 2025
130 checks passed
@lubieowoce lubieowoce deleted the lubieowoce/ban-next-cache-in-client branch February 12, 2025 20:27
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 27, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
created-by: Next.js team PRs by the Next.js team. locked tests Turbopack Related to Turbopack with Next.js.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants