refactor: auto inject hmr preamble without transformIndexHtml
#891
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This PR changes the approach of running preamble code for hmr. Instead of using inline script of
transformIndexHtml
, we can heuristically target react code by__REACT_DEVTOOLS_GLOBAL_HOOK__
and inject preamble virtual.This will likely cause doubly running preamble for some ssr frameworks which already injects it manually without(EDIT: I updatedtransformIndexHtml
, but it seems actually fine.@vitejs/plugin-rsc
have the following logic and CI here didn't breakpackages/common/refresh-runtime.js
soinjectIntoGlobalHook
happens only once)FYI, the idea of injecting to React code is something
@vitejs/plugin-rsc
did to handleAsyncLocalStorage
:vite-plugin-react/packages/plugin-rsc/src/plugin.ts
Lines 1077 to 1078 in 73be2f0
TODO
astro https://github.com/vitejs/vite-ecosystem-ci/actions/runs/18163217112rakkas https://github.com/vitejs/vite-ecosystem-ci/actions/runs/18163231974vitest https://github.com/vitejs/vite-ecosystem-ci/actions/runs/18163260541