Get critical CSS in dev from client env #13503
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.
Fixes #13379
When we extract critical CSS during dev, we're currently doing this from the SSR environment, or a custom environment when using Vite's Environment API to support non-Node SSR environments. This seems to cause issues if the SSR environment differs from the client environment in terms of resolving CSS files. In the case of the linked issue above, our critical CSS extraction logic doesn't work for the virtual CSS modules that Pigment CSS introduces.
To fix this issue, we now request the same CSS that the browser does by passing the CSS URL to
viteDevServer.transformRequest
. The only down side of this approach is that it returns a string of JS code with the CSS embedded within it as a string (along with HMR code etc.). To work around this, we use Babel to parse the JS and find the value for the__vite__css
variable.