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 hmr updates with rebuilding for build errors #60676

Merged
merged 12 commits into from
Jan 16, 2024
Merged

Conversation

huozhi
Copy link
Member

@huozhi huozhi commented Jan 15, 2024

What

  • Sometimes the display of the error overlay is not consistent even when you fixed the error

Example:

  • You have a client page, and you add metadata export, Next.js will error that it's not allowed in client component.
  • You fix it, but the error overlay is not disappeared. Or you fix it, then introduce it again, then fix it again, the error overlay is still there.

How

We're checking if the HMR webpack hash is changed to decide if we're going to do a hot update in BUILT and SYNC event, but we update the hash at the very beginning of the event handler. isUpdateAvailable() will return false in the later calls but the hash has already changed before. So we check if they change before applying hot updates, and then use it later with isUpdateAvailable() to determine if necessary to process a new hot update

There's a early return in the warnings condition which lead to confusing can be optimized, we removed it and dropped the incorrect condition at the end where we apply the hot updates. We should just call handleHotUpdate() because that one already checks if there’s an update available.

Closes NEXT-2107

@ijjk
Copy link
Member

ijjk commented Jan 15, 2024

Tests Passed

@ijjk
Copy link
Member

ijjk commented Jan 15, 2024

Stats from current PR

Default Build
General
vercel/next.js canary vercel/next.js fix/hmr-build-error Change
buildDuration 12.8s 13s ⚠️ +146ms
buildDurationCached 7.2s 6.3s N/A
nodeModulesSize 200 MB 200 MB N/A
nextStartRea..uration (ms) 425ms 426ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js fix/hmr-build-error Change
193.HASH.js gzip 181 B 182 B N/A
3f784ff6-HASH.js gzip 53.4 kB 53.4 kB
433-HASH.js gzip 28.9 kB 28.9 kB N/A
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 239 B 242 B N/A
main-HASH.js gzip 31.8 kB 31.8 kB N/A
webpack-HASH.js gzip 1.7 kB 1.7 kB N/A
Overall change 98.6 kB 98.6 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js fix/hmr-build-error Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary vercel/next.js fix/hmr-build-error Change
_app-HASH.js gzip 194 B 195 B N/A
_error-HASH.js gzip 183 B 181 B N/A
amp-HASH.js gzip 504 B 502 B N/A
css-HASH.js gzip 321 B 321 B
dynamic-HASH.js gzip 2.5 kB 2.5 kB N/A
edge-ssr-HASH.js gzip 255 B 253 B N/A
head-HASH.js gzip 350 B 349 B N/A
hooks-HASH.js gzip 369 B 369 B
image-HASH.js gzip 4.28 kB 4.28 kB N/A
index-HASH.js gzip 255 B 256 B N/A
link-HASH.js gzip 2.61 kB 2.61 kB
routerDirect..HASH.js gzip 312 B 311 B N/A
script-HASH.js gzip 385 B 383 B N/A
withRouter-HASH.js gzip 307 B 308 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 3.4 kB 3.4 kB
Client Build Manifests
vercel/next.js canary vercel/next.js fix/hmr-build-error Change
_buildManifest.js gzip 483 B 484 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js fix/hmr-build-error Change
index.html gzip 528 B 528 B
link.html gzip 540 B 540 B
withRouter.html gzip 522 B 524 B N/A
Overall change 1.07 kB 1.07 kB
Edge SSR bundle Size
vercel/next.js canary vercel/next.js fix/hmr-build-error Change
edge-ssr.js gzip 93.9 kB 93.9 kB N/A
page.js gzip 148 kB 148 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js fix/hmr-build-error Change
middleware-b..fest.js gzip 621 B 625 B N/A
middleware-r..fest.js gzip 151 B 151 B
middleware.js gzip 37.5 kB 37.5 kB N/A
edge-runtime..pack.js gzip 1.92 kB 1.92 kB
Overall change 2.07 kB 2.07 kB
Next Runtimes
vercel/next.js canary vercel/next.js fix/hmr-build-error Change
app-page-exp...dev.js gzip 169 kB 169 kB
app-page-exp..prod.js gzip 95.3 kB 95.3 kB
app-page-tur..prod.js gzip 96 kB 96 kB
app-page-tur..prod.js gzip 90.5 kB 90.5 kB
app-page.run...dev.js gzip 142 kB 142 kB
app-page.run..prod.js gzip 89.9 kB 89.9 kB
app-route-ex...dev.js gzip 24.1 kB 24.1 kB
app-route-ex..prod.js gzip 16.8 kB 16.8 kB
app-route-tu..prod.js gzip 16.8 kB 16.8 kB
app-route-tu..prod.js gzip 16.3 kB 16.3 kB
app-route.ru...dev.js gzip 23.5 kB 23.5 kB
app-route.ru..prod.js gzip 16.3 kB 16.3 kB
pages-api-tu..prod.js gzip 9.38 kB 9.38 kB
pages-api.ru...dev.js gzip 9.65 kB 9.65 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.6 kB 49.6 kB
Overall change 941 kB 941 kB
Commit: 7c34963

@huozhi huozhi marked this pull request as ready for review January 16, 2024 09:31
Copy link
Member

@timneutkens timneutkens left a comment

Choose a reason for hiding this comment

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

Changes look good. Can you update the PR description to reflect what we discussed 👍

@timneutkens timneutkens merged commit dc39448 into canary Jan 16, 2024
67 checks passed
@timneutkens timneutkens deleted the fix/hmr-build-error branch January 16, 2024 11:31
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jan 31, 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.

3 participants