feat: reuse existing style elements in dev #12678
Merged
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
During dev, Vite injects imported CSS files' contents into the document inside style tags. When doing SSR, this causes FOUC until the JavaScript is loaded.
In Rakkas, I solve this by scanning the module graph for the route that is being rendered to discover which CSS files will be needed and I inject link elements to them into the HTML. Since Vite doesn't know about this, it goes on and adds its style tags anyway, causing duplicate styles. It becomes a problem when CSS files are HMRed: The original link doesn't get updated so some styles start clashing. So Rakkas has to remove the links from the document once the styles are loaded. Most other Vite-based frameworks must be doing something similar.
Although it works, it would be much cleaner if we inserted style tags just like Vite does and Vite picked them up at startup. This PR implements this.
Additional context
What is the purpose of this pull request?
Before submitting the PR, please make sure you do the following
fixes #123
).