-
-
Notifications
You must be signed in to change notification settings - Fork 6.7k
fix(hmr): avoid infinite loop happening with hot.invalidate
in circular deps
#19870
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): avoid infinite loop happening with hot.invalidate
in circular deps
#19870
Conversation
/ecosystem-ci run |
commit: |
📝 Ran ecosystem CI on
✅ astro, analogjs, histoire, marko, nuxt, react-router, previewjs, rakkas, quasar, ladle, vite-setup-catalogue, vuepress, vite-plugin-pwa, vite-plugin-vue, qwik, vitest, vitepress, vite-plugin-react-swc, sveltekit, vite-plugin-cloudflare, waku, unocss |
I've taken a look at the react plugin failure. It's probably a flaky fail (vitejs/vite-plugin-react#459). |
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | vite | 6.2.1 | 6.3.1 | ## [v6.3.1](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small631-2025-04-17-small) - fix: avoid using `Promise.allSettled` in preload function ([#19805](vitejs/vite#19805)) ([35c7f35](vitejs/vite@35c7f35)), closes [#19805](vitejs/vite#19805) - fix: backward compat for internal plugin `transform` calls ([#19878](vitejs/vite#19878)) ([a152b7c](vitejs/vite@a152b7c)), closes [#19878](vitejs/vite#19878) ## [v6.3.0](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#630-2025-04-16) - fix(hmr): avoid infinite loop happening with `hot.invalidate` in circular deps ([#19870](vitejs/vite#19870)) ([d4ee5e8](vitejs/vite@d4ee5e8)), closes [#19870](vitejs/vite#19870) - fix(preview): use host url to open browser ([#19836](vitejs/vite#19836)) ([5003434](vitejs/vite@5003434)), closes [#19836](vitejs/vite#19836) ## [v6.2.6](https://github.com/vitejs/vite/releases/tag/v6.2.6) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v6.2.6/packages/vite/CHANGELOG.md) for details. ## [v6.2.5](https://github.com/vitejs/vite/releases/tag/v6.2.5) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v6.2.5/packages/vite/CHANGELOG.md) for details. ## [v6.2.4](https://github.com/vitejs/vite/releases/tag/v6.2.4) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v6.2.4/packages/vite/CHANGELOG.md) for details. ## [v6.2.3](https://github.com/vitejs/vite/releases/tag/v6.2.3) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v6.2.3/packages/vite/CHANGELOG.md) for details. ## [v6.2.2](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small622-2025-03-14-small) - fix: await client buildStart on top level buildStart ([#19624](vitejs/vite#19624)) ([b31faab](vitejs/vite@b31faab)), closes [#19624](vitejs/vite#19624) - fix(css): inline css correctly for double quote use strict ([#19590](vitejs/vite#19590)) ([d0aa833](vitejs/vite@d0aa833)), closes [#19590](vitejs/vite#19590) - fix(deps): update all non-major dependencies ([#19613](vitejs/vite#19613)) ([363d691](vitejs/vite@363d691)), closes [#19613](vitejs/vite#19613) - fix(indexHtml): ensure correct URL when querying module graph ([#19601](vitejs/vite#19601)) ([dc5395a](vitejs/vite@dc5395a)), closes [#19601](vitejs/vite#19601) - fix(preview): use preview https config, not server ([#19633](vitejs/vite#19633)) ([98b3160](vitejs/vite@98b3160)), closes [#19633](vitejs/vite#19633) - fix(ssr): use optional chaining to prevent "undefined is not an object" happening in \`ssrRewriteStac ([4309755](vitejs/vite@4309755)), closes [#19612](vitejs/vite#19612) - feat: show friendly error for malformed `base` ([#19616](vitejs/vite#19616)) ([2476391](vitejs/vite@2476391)), closes [#19616](vitejs/vite#19616) - feat(worker): show asset filename conflict warning ([#19591](vitejs/vite#19591)) ([367d968](vitejs/vite@367d968)), closes [#19591](vitejs/vite#19591) - chore: extend commit hash correctly when ambigious with a non-commit object ([#19600](vitejs/vite#19600)) ([89a6287](vitejs/vite@89a6287)), closes [#19600](vitejs/vite#19600)
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | vite | 6.2.1 | 6.3.1 | ## [v6.3.1](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small631-2025-04-17-small) - fix: avoid using `Promise.allSettled` in preload function ([#19805](vitejs/vite#19805)) ([35c7f35](vitejs/vite@35c7f35)), closes [#19805](vitejs/vite#19805) - fix: backward compat for internal plugin `transform` calls ([#19878](vitejs/vite#19878)) ([a152b7c](vitejs/vite@a152b7c)), closes [#19878](vitejs/vite#19878) ## [v6.3.0](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#630-2025-04-16) - fix(hmr): avoid infinite loop happening with `hot.invalidate` in circular deps ([#19870](vitejs/vite#19870)) ([d4ee5e8](vitejs/vite@d4ee5e8)), closes [#19870](vitejs/vite#19870) - fix(preview): use host url to open browser ([#19836](vitejs/vite#19836)) ([5003434](vitejs/vite@5003434)), closes [#19836](vitejs/vite#19836) ## [v6.2.6](https://github.com/vitejs/vite/releases/tag/v6.2.6) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v6.2.6/packages/vite/CHANGELOG.md) for details. ## [v6.2.5](https://github.com/vitejs/vite/releases/tag/v6.2.5) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v6.2.5/packages/vite/CHANGELOG.md) for details. ## [v6.2.4](https://github.com/vitejs/vite/releases/tag/v6.2.4) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v6.2.4/packages/vite/CHANGELOG.md) for details. ## [v6.2.3](https://github.com/vitejs/vite/releases/tag/v6.2.3) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v6.2.3/packages/vite/CHANGELOG.md) for details. ## [v6.2.2](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small622-2025-03-14-small) - fix: await client buildStart on top level buildStart ([#19624](vitejs/vite#19624)) ([b31faab](vitejs/vite@b31faab)), closes [#19624](vitejs/vite#19624) - fix(css): inline css correctly for double quote use strict ([#19590](vitejs/vite#19590)) ([d0aa833](vitejs/vite@d0aa833)), closes [#19590](vitejs/vite#19590) - fix(deps): update all non-major dependencies ([#19613](vitejs/vite#19613)) ([363d691](vitejs/vite@363d691)), closes [#19613](vitejs/vite#19613) - fix(indexHtml): ensure correct URL when querying module graph ([#19601](vitejs/vite#19601)) ([dc5395a](vitejs/vite@dc5395a)), closes [#19601](vitejs/vite#19601) - fix(preview): use preview https config, not server ([#19633](vitejs/vite#19633)) ([98b3160](vitejs/vite@98b3160)), closes [#19633](vitejs/vite#19633) - fix(ssr): use optional chaining to prevent "undefined is not an object" happening in \`ssrRewriteStac ([4309755](vitejs/vite@4309755)), closes [#19612](vitejs/vite#19612) - feat: show friendly error for malformed `base` ([#19616](vitejs/vite#19616)) ([2476391](vitejs/vite@2476391)), closes [#19616](vitejs/vite#19616) - feat(worker): show asset filename conflict warning ([#19591](vitejs/vite#19591)) ([367d968](vitejs/vite@367d968)), closes [#19591](vitejs/vite#19591) - chore: extend commit hash correctly when ambigious with a non-commit object ([#19600](vitejs/vite#19600)) ([89a6287](vitejs/vite@89a6287)), closes [#19600](vitejs/vite#19600)
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | vite | 6.2.1 | 6.3.2 | ## [v6.3.2](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small632-2025-04-18-small) - fix: match default asserts case insensitive ([#19852](vitejs/vite#19852)) ([cbdab1d](vitejs/vite@cbdab1d)), closes [#19852](vitejs/vite#19852) - fix: open first url if host does not match any urls ([#19886](vitejs/vite#19886)) ([6abbdce](vitejs/vite@6abbdce)), closes [#19886](vitejs/vite#19886) - fix(css): respect `css.lightningcss` option in css minification process ([#19879](vitejs/vite#19879)) ([b5055e0](vitejs/vite@b5055e0)), closes [#19879](vitejs/vite#19879) - fix(deps): update all non-major dependencies ([#19698](vitejs/vite#19698)) ([bab4cb9](vitejs/vite@bab4cb9)), closes [#19698](vitejs/vite#19698) - feat(css): improve lightningcss messages ([#19880](vitejs/vite#19880)) ([c713f79](vitejs/vite@c713f79)), closes [#19880](vitejs/vite#19880) ## [v6.3.1](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small631-2025-04-17-small) - fix: avoid using `Promise.allSettled` in preload function ([#19805](vitejs/vite#19805)) ([35c7f35](vitejs/vite@35c7f35)), closes [#19805](vitejs/vite#19805) - fix: backward compat for internal plugin `transform` calls ([#19878](vitejs/vite#19878)) ([a152b7c](vitejs/vite@a152b7c)), closes [#19878](vitejs/vite#19878) ## [v6.3.0](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#630-2025-04-16) - fix(hmr): avoid infinite loop happening with `hot.invalidate` in circular deps ([#19870](vitejs/vite#19870)) ([d4ee5e8](vitejs/vite@d4ee5e8)), closes [#19870](vitejs/vite#19870) - fix(preview): use host url to open browser ([#19836](vitejs/vite#19836)) ([5003434](vitejs/vite@5003434)), closes [#19836](vitejs/vite#19836) ## [v6.2.6](https://github.com/vitejs/vite/releases/tag/v6.2.6) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v6.2.6/packages/vite/CHANGELOG.md) for details. ## [v6.2.5](https://github.com/vitejs/vite/releases/tag/v6.2.5) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v6.2.5/packages/vite/CHANGELOG.md) for details. ## [v6.2.4](https://github.com/vitejs/vite/releases/tag/v6.2.4) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v6.2.4/packages/vite/CHANGELOG.md) for details. ## [v6.2.3](https://github.com/vitejs/vite/releases/tag/v6.2.3) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v6.2.3/packages/vite/CHANGELOG.md) for details. ## [v6.2.2](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small622-2025-03-14-small) - fix: await client buildStart on top level buildStart ([#19624](vitejs/vite#19624)) ([b31faab](vitejs/vite@b31faab)), closes [#19624](vitejs/vite#19624) - fix(css): inline css correctly for double quote use strict ([#19590](vitejs/vite#19590)) ([d0aa833](vitejs/vite@d0aa833)), closes [#19590](vitejs/vite#19590) - fix(deps): update all non-major dependencies ([#19613](vitejs/vite#19613)) ([363d691](vitejs/vite@363d691)), closes [#19613](vitejs/vite#19613) - fix(indexHtml): ensure correct URL when querying module graph ([#19601](vitejs/vite#19601)) ([dc5395a](vitejs/vite@dc5395a)), closes [#19601](vitejs/vite#19601) - fix(preview): use preview https config, not server ([#19633](vitejs/vite#19633)) ([98b3160](vitejs/vite@98b3160)), closes [#19633](vitejs/vite#19633) - fix(ssr): use optional chaining to prevent "undefined is not an object" happening in \`ssrRewriteStac ([4309755](vitejs/vite@4309755)), closes [#19612](vitejs/vite#19612) - feat: show friendly error for malformed `base` ([#19616](vitejs/vite#19616)) ([2476391](vitejs/vite@2476391)), closes [#19616](vitejs/vite#19616) - feat(worker): show asset filename conflict warning ([#19591](vitejs/vite#19591)) ([367d968](vitejs/vite@367d968)), closes [#19591](vitejs/vite#19591) - chore: extend commit hash correctly when ambigious with a non-commit object ([#19600](vitejs/vite#19600)) ([89a6287](vitejs/vite@89a6287)), closes [#19600](vitejs/vite#19600)
Description
If all modules in the circular import calls
import.meta.hot.invalidate
, Vite will try updating the module endlessly.This PR fixes that by passing where the first
import.meta.hot.invalidate
call happened. If there was a circularimport.meta.hot.invalidate
call, Vite will now run the full reload.I didn't encounter this in past. Maybe #19793 causes it to happen more often.
The test case is based on #11268.
close #16709