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

refactor: separate tsconfck caches per config in a weakmap #17317

Merged
merged 3 commits into from
Oct 30, 2024

Conversation

dominikg
Copy link
Contributor

Description

alternative to #17304

the weakmap on config ensures that multiple vite devserver instances don't share the global tsconfck cache.

Copy link

stackblitz bot commented May 25, 2024

Review PR in StackBlitz Codeflow Run & review this pull request in StackBlitz Codeflow.

@bluwy
Copy link
Member

bluwy commented May 27, 2024

Why can't multiple dev servers share the same cache? Shouldn't it not be dependant on the values of the config?

@dominikg
Copy link
Contributor Author

Why can't multiple dev servers share the same cache? Shouldn't it not be dependant on the values of the config?

@patak-dev mentioned that some projects use mutiple server instances simultaneously with different configs. They might watch entirely different subtrees of a monorepo and then having a cache for each one limits the refresh to that subtree.

@bluwy
Copy link
Member

bluwy commented May 27, 2024

I see. Though there is still the tradeoff that if the subtrees overlap, we would have duplicated the cache in memory. Personally I think since editing the tsconfig.json isn't common, and full reloads shouldn't be too bad, it's okay to restart entirely for now. Or if we want to fix this, we can have another cache of watched tsconfig file paths per server only?

@dominikg
Copy link
Contributor Author

it's not only about configs outside of the root. even if a new tsconfig is added inside, you have to restart that server. Its kind of niche because most setups only involve one devserver, so they won't see much of a difference, but it can help with multiples. Having overlap and read+cache twice is the nature of that overlap.

Given that we try to avoid global caches (even more so with the new environments splitting things more) i'm inclined to follow this one. The alternative PR still has that global cache.

@bluwy
Copy link
Member

bluwy commented May 27, 2024

Do you mean that the current server top-level variable is only causing one server to restart only? I agree that it would be good to handle multiple servers there, but it looks the current v6 branch already fixed that?

it's not only about configs outside of the root. even if a new tsconfig is added inside, you have to restart that server.

I still don't quite understand why we need to duplicate the cache per server though. If a tsconfig is added inside a root, the server already restarts today? If it's outside the root (e.g. another subpackage), in the current v6 branch the server will not be watching that other root and tsconfig.json, so it should rightfully not restart?

@dominikg
Copy link
Contributor Author

Do you mean that the current server top-level variable is only causing one server to restart only? I agree that it would be good to handle multiple servers there, but it looks the current v6 branch already fixed that?

it's not only about configs outside of the root. even if a new tsconfig is added inside, you have to restart that server.

I still don't quite understand why we need to duplicate the cache per server though. If a tsconfig is added inside a root, the server already restarts today? If it's outside the root (e.g. another subpackage), in the current v6 branch the server will not be watching that other root and tsconfig.json, so it should rightfully not restart?

but the tsconfck cache would still get flushed if it is just one global one...

@bluwy
Copy link
Member

bluwy commented May 27, 2024

I think it's ok since editing the tsconfig.json is not common, and the memory taken by the cache is something people will likely hit more often?

If we can solve granular invalidation (which is understandably tricky), we can also keep the current single cache today.

@patak-dev
Copy link
Member

We currently have a separate FsUtils cache per ResolvedConfig and also a Package Cache per config, no? This is why I thought the tsconfck is similar. Is the tsconfck cache a lot bigger than the other ones? To be fair, I tried to push for the FsUtils to share the state internally, but it didn't progressed much because of the added complexity.

But I'm ok keeping a global one too. Restarting all servers is an ok tradeoff to pay for sharing a single one. @dominikg I think #17304 won't do that though. It will currently only restart the server that is watching the json file and clear the global cache. So the other servers will end up with a possible outdated state. For this to work, it should be maybe similar to the current code in Vite 5 but with a WeakSet keeping all the servers instead of a single Server global variable. If that is the case, you may also be able to keep the back compat and push the change to Vite 5.3 because you could still use the server in the weak set when the function is called as free function (without a server).

@dominikg
Copy link
Contributor Author

dominikg commented Jun 4, 2024

granular invalidation is too complex and given how rare it is to edit tsconfig while dev is running i'd still avoid that.

If we keep one global tsconfck cache, the question becomes how we deal with ensureWatchedFile if there are multiple servers and also how to reload all environments of all servers if just one of them detected a change that flushed the global tsconfig cache.

Having one tsconfig cache per server (and its watcher) solves this issue as each server is in control of its own fate.

Keeping one global cache could work if we declared a breaking change and not call ensureWatchedFile anymore for discovered tsconfig files outside of already watched areas.

@patak-dev
Copy link
Member

We have a free exported function transformWithEsbuild() that is currently using the global server to ensure new tsconfig.json are watched when out of root. We should change this. If you call this function, and then destroy the server and start a new one, the global tsconfck will end up potentially with an entry that is no longer watched.

Actually, this is a problem in general. If we have a single tsconfck cache, every time a server is destroyed, all the cached tsconfig.json that are being watched should be removed from the cache. And because a single change will trigger full reloads across the board, this means that every time we destroy a server, we should reload all the others?

I think that properly sharing this cache is quite hard as its tied to the assumption of an existing watcher lifecycle. What this PR is doing with a cache per ResolvedConfig works (same as what we are doing with FsUtils) because we have a 1-1 ResolvedConfig <-> Server relationship (we create the config as part of createServer, the first line is a resolveConfig call, a config can't be reused to create two servers). We can also trust this as we have all our internal plugins weakmap caches working in the same way. This isn't great though. We are cheating to get the watcher when we don't have the Server at hand: ResolvedConfig <-> Server <-> Watcher. In Vite 6, internal plugin caches changes because the weakmaps caches are in general per Environment instead of per ResolvedConfig, and the environment instance has access to the watcher.

We still have the same per-server (per-watcher actually) caches in Vite 6. FsUtils, PackageData, etc, all work against the server ResolvedConfig. Because we have environment.config to get the resolved config, we can get access to any of these caches too.

Probably the right thing to do here is to have a new Caches abstraction (that is associated to a server watcher), and we can pass around (kind of like the package data cache).

I don't think we need to do a refactoring here in Vite 6 given how much has changed already, and I don't really now how deep it will go. Associating caches to ResolvedConfig and assuming each server has a single ResolvedConfig is working well so far so I'd say we keep doing the same for now. It would be good to review every cache in Vite later on (Vite 7?) and see if we can clean up things.

Given the difficulties to keeping a global cache, I think we have two clean options:

  • Do a breaking change in Vite 6 and define that changes in tsconfig.json are not watched at all by a Vite process. You'll need to kill it and start again.
  • Merge this PR (or a similar approach) moving the tsconfck cache to be per-watcher (by keying with a ResolvedConfig, as we do with FsUtils). Then we can ensure that the cache for a server will properly reload the server when needed.

Or we keep trying to have a global cache that only work in some cases and we document which things are supported. My vote goes to one of the two clean options above.

@patak-dev
Copy link
Member

@dominikg I reverted the changes to esbuild tsconfck in the v6/environment-api branch 60f90a0. It will be easier to test the Environment API compat if we fix this in a separate PR once everything is green again. I still think we should do this for v6. We can rebase this PR to point to main once we merge the other PR.

Base automatically changed from v6/environment-api to main September 4, 2024 09:27
@sapphi-red sapphi-red force-pushed the v6/env-tsconfck-alt branch from fe5b0ef to 9f56692 Compare October 3, 2024 07:03
@sapphi-red sapphi-red force-pushed the v6/env-tsconfck-alt branch from 9f56692 to 22ff43f Compare October 3, 2024 07:03
@sapphi-red sapphi-red added the feat: environment API Vite Environment API label Oct 3, 2024
@sapphi-red
Copy link
Member

/ecosystem-ci run

@vite-ecosystem-ci
Copy link

📝 Ran ecosystem CI on baec7e0: Open

suite result latest scheduled
histoire failure failure
remix failure failure
sveltekit success failure
vike failure failure
vite-environment-examples failure success
vitest failure failure

analogjs, astro, ladle, laravel, marko, nuxt, previewjs, quasar, qwik, rakkas, redwoodjs, storybook, unocss, vite-plugin-pwa, vite-plugin-react, vite-plugin-react-swc, vite-plugin-svelte, vite-plugin-vue, vite-setup-catalogue, vitepress, vuepress

@sapphi-red

This comment was marked as duplicate.

@vite-ecosystem-ci

This comment was marked as duplicate.

@sapphi-red
Copy link
Member

vite-environment-example is failing because of #18255.

@sapphi-red sapphi-red removed the feat: environment API Vite Environment API label Oct 3, 2024
Copy link
Member

@sapphi-red sapphi-red left a comment

Choose a reason for hiding this comment

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

I think this is a bug fix. The paramter of transformWithEsbuild is a bit bloated but I guess it can't be helped. I thought about replacing config and watcher with a pluginContext (because it's possible to obtain both), but that made it difficult to use it from non-plugin context.

@sapphi-red sapphi-red added this to the 6.0 milestone Oct 4, 2024
Copy link
Member

@patak-dev patak-dev left a comment

Choose a reason for hiding this comment

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

I think it is ok to merge this to at least remove the global tsconfck cache. @bluwy I'll leave this one open in case you'd still like to check for other options here

@patak-dev patak-dev merged commit b9b01d5 into main Oct 30, 2024
10 of 12 checks passed
@patak-dev patak-dev deleted the v6/env-tsconfck-alt branch October 30, 2024 08:27
alexandresoro pushed a commit to alexandresoro/ouca that referenced this pull request Dec 21, 2024
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [vite](https://vite.dev) ([source](https://github.com/vitejs/vite/tree/HEAD/packages/vite)) | devDependencies | major | [`5.4.11` -> `6.0.5`](https://renovatebot.com/diffs/npm/vite/5.4.11/6.0.5) |

---

### Release Notes

<details>
<summary>vitejs/vite (vite)</summary>

### [`v6.0.5`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small605-2024-12-20-small)

[Compare Source](https://github.com/vitejs/vite/compare/v6.0.4...v6.0.5)

-   fix: esbuild regression (pin to 0.24.0) ([#&#8203;19027](https://github.com/vitejs/vite/issues/19027)) ([4359e0d](https://github.com/vitejs/vite/commit/4359e0d5b33afd6259a4dcef787cc2670e963126)), closes [#&#8203;19027](https://github.com/vitejs/vite/issues/19027)

### [`v6.0.4`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small604-2024-12-19-small)

[Compare Source](https://github.com/vitejs/vite/compare/v6.0.3...v6.0.4)

-   fix: `this.resolve` skipSelf should not skip for different `id` or `import` ([#&#8203;18903](https://github.com/vitejs/vite/issues/18903)) ([4727320](https://github.com/vitejs/vite/commit/472732057cb2273908e1fca8aa7dc18a7e1f7c74)), closes [#&#8203;18903](https://github.com/vitejs/vite/issues/18903)
-   fix: fallback terser to main thread when function options are used ([#&#8203;18987](https://github.com/vitejs/vite/issues/18987)) ([12b612d](https://github.com/vitejs/vite/commit/12b612d8be2a18456fd94a2f0291d32d1ffb29d4)), closes [#&#8203;18987](https://github.com/vitejs/vite/issues/18987)
-   fix: merge client and ssr values for `pluginContainer.getModuleInfo` ([#&#8203;18895](https://github.com/vitejs/vite/issues/18895)) ([258cdd6](https://github.com/vitejs/vite/commit/258cdd637d1ee80a3c4571685135e89fe283f3a6)), closes [#&#8203;18895](https://github.com/vitejs/vite/issues/18895)
-   fix(css): escape double quotes in `url()` when lightningcss is used ([#&#8203;18997](https://github.com/vitejs/vite/issues/18997)) ([3734f80](https://github.com/vitejs/vite/commit/3734f8099e3922c189497ce404fe7ff2f8929ae1)), closes [#&#8203;18997](https://github.com/vitejs/vite/issues/18997)
-   fix(css): root relative import in sass modern API on Windows ([#&#8203;18945](https://github.com/vitejs/vite/issues/18945)) ([c4b532c](https://github.com/vitejs/vite/commit/c4b532cc900bf988073583511f57bd581755d5e3)), closes [#&#8203;18945](https://github.com/vitejs/vite/issues/18945)
-   fix(css): skip non css in custom sass importer ([#&#8203;18970](https://github.com/vitejs/vite/issues/18970)) ([21680bd](https://github.com/vitejs/vite/commit/21680bdf9ca7c12f677136b56e47f46469db8be2)), closes [#&#8203;18970](https://github.com/vitejs/vite/issues/18970)
-   fix(deps): update all non-major dependencies ([#&#8203;18967](https://github.com/vitejs/vite/issues/18967)) ([d88d000](https://github.com/vitejs/vite/commit/d88d0004a8e891ca6026d356695e0b319caa7fce)), closes [#&#8203;18967](https://github.com/vitejs/vite/issues/18967)
-   fix(deps): update all non-major dependencies ([#&#8203;18996](https://github.com/vitejs/vite/issues/18996)) ([2b4f115](https://github.com/vitejs/vite/commit/2b4f115129fb3fbd730a92078acb724f8527b7f7)), closes [#&#8203;18996](https://github.com/vitejs/vite/issues/18996)
-   fix(optimizer): keep NODE_ENV as-is when keepProcessEnv is `true` ([#&#8203;18899](https://github.com/vitejs/vite/issues/18899)) ([8a6bb4e](https://github.com/vitejs/vite/commit/8a6bb4e11d5c1b61511ae1e5ed3ae3c65a33b2dc)), closes [#&#8203;18899](https://github.com/vitejs/vite/issues/18899)
-   fix(ssr): recreate ssrCompatModuleRunner on restart ([#&#8203;18973](https://github.com/vitejs/vite/issues/18973)) ([7d6dd5d](https://github.com/vitejs/vite/commit/7d6dd5d1d655d173668192509f63ac4ebf7af299)), closes [#&#8203;18973](https://github.com/vitejs/vite/issues/18973)
-   chore: better validation error message for dts build ([#&#8203;18948](https://github.com/vitejs/vite/issues/18948)) ([63b82f1](https://github.com/vitejs/vite/commit/63b82f1e29a00d06a82144fd03ea8d6eff114290)), closes [#&#8203;18948](https://github.com/vitejs/vite/issues/18948)
-   chore(deps): update all non-major dependencies ([#&#8203;18916](https://github.com/vitejs/vite/issues/18916)) ([ef7a6a3](https://github.com/vitejs/vite/commit/ef7a6a35e6827b92445e5a0c2c0022616efc80dd)), closes [#&#8203;18916](https://github.com/vitejs/vite/issues/18916)
-   chore(deps): update dependency [@&#8203;rollup/plugin-node-resolve](https://github.com/rollup/plugin-node-resolve) to v16 ([#&#8203;18968](https://github.com/vitejs/vite/issues/18968)) ([62fad6d](https://github.com/vitejs/vite/commit/62fad6d79f83daf916dde866909a2a3dd0c79583)), closes [#&#8203;18968](https://github.com/vitejs/vite/issues/18968)
-   refactor: make internal invoke event to use the same interface with `handleInvoke` ([#&#8203;18902](https://github.com/vitejs/vite/issues/18902)) ([27f691b](https://github.com/vitejs/vite/commit/27f691b0c7dca2259108fe6b79583b459429bf7f)), closes [#&#8203;18902](https://github.com/vitejs/vite/issues/18902)
-   refactor: simplify manifest plugin code ([#&#8203;18890](https://github.com/vitejs/vite/issues/18890)) ([1bfe21b](https://github.com/vitejs/vite/commit/1bfe21b9440f318c940f90e425a18588595225fd)), closes [#&#8203;18890](https://github.com/vitejs/vite/issues/18890)
-   test: test `ModuleRunnerTransport` `invoke` API ([#&#8203;18865](https://github.com/vitejs/vite/issues/18865)) ([e5f5301](https://github.com/vitejs/vite/commit/e5f5301924b775837b2a1253c37f76555bce3e3e)), closes [#&#8203;18865](https://github.com/vitejs/vite/issues/18865)
-   test: test output hash changes ([#&#8203;18898](https://github.com/vitejs/vite/issues/18898)) ([bfbb130](https://github.com/vitejs/vite/commit/bfbb130fccefbe7e3880f09defb4fceacce39481)), closes [#&#8203;18898](https://github.com/vitejs/vite/issues/18898)

### [`v6.0.3`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small603-2024-12-05-small)

[Compare Source](https://github.com/vitejs/vite/compare/v6.0.2...v6.0.3)

-   fix: handle postcss load unhandled rejections ([#&#8203;18886](https://github.com/vitejs/vite/issues/18886)) ([d5fb653](https://github.com/vitejs/vite/commit/d5fb653c15903ccf84a093f212da86f0327a9a6f)), closes [#&#8203;18886](https://github.com/vitejs/vite/issues/18886)
-   fix: make handleInvoke interface compatible with invoke ([#&#8203;18876](https://github.com/vitejs/vite/issues/18876)) ([a1dd396](https://github.com/vitejs/vite/commit/a1dd396da856401a12c921d0cd2c4e97cb63f1b5)), closes [#&#8203;18876](https://github.com/vitejs/vite/issues/18876)
-   fix: make result interfaces for `ModuleRunnerTransport#invoke` more explicit ([#&#8203;18851](https://github.com/vitejs/vite/issues/18851)) ([a75fc31](https://github.com/vitejs/vite/commit/a75fc3193d5e8d8756dfb3a046873e9c222bb6c8)), closes [#&#8203;18851](https://github.com/vitejs/vite/issues/18851)
-   fix: merge `environments.ssr.resolve` with root `ssr` config ([#&#8203;18857](https://github.com/vitejs/vite/issues/18857)) ([3104331](https://github.com/vitejs/vite/commit/310433106e1e8a0c39dc397e3eace8a71a2416c2)), closes [#&#8203;18857](https://github.com/vitejs/vite/issues/18857)
-   fix: no permission to create vite config file ([#&#8203;18844](https://github.com/vitejs/vite/issues/18844)) ([ff47778](https://github.com/vitejs/vite/commit/ff47778004d609dbeef7f192783e6f253dd66237)), closes [#&#8203;18844](https://github.com/vitejs/vite/issues/18844)
-   fix: remove CSS import in CJS correctly in some cases ([#&#8203;18885](https://github.com/vitejs/vite/issues/18885)) ([690a36f](https://github.com/vitejs/vite/commit/690a36ffdb7d6f6568f35a304b4904e7aa475f17)), closes [#&#8203;18885](https://github.com/vitejs/vite/issues/18885)
-   fix(config): bundle files referenced with imports field ([#&#8203;18887](https://github.com/vitejs/vite/issues/18887)) ([2b5926a](https://github.com/vitejs/vite/commit/2b5926a0e79ce47d22536d38eed2629d326caca0)), closes [#&#8203;18887](https://github.com/vitejs/vite/issues/18887)
-   fix(config): make stacktrace path correct when sourcemap is enabled ([#&#8203;18833](https://github.com/vitejs/vite/issues/18833)) ([20fdf21](https://github.com/vitejs/vite/commit/20fdf210ee0ac0824b2db74876527cb7f378a9e8)), closes [#&#8203;18833](https://github.com/vitejs/vite/issues/18833)
-   fix(css): rewrite url when image-set and url exist at the same time ([#&#8203;18868](https://github.com/vitejs/vite/issues/18868)) ([d59efd8](https://github.com/vitejs/vite/commit/d59efd8dfd1c5bf2e7c45c7cdb1c0abc2a05ba02)), closes [#&#8203;18868](https://github.com/vitejs/vite/issues/18868)
-   fix(deps): update all non-major dependencies ([#&#8203;18853](https://github.com/vitejs/vite/issues/18853)) ([5c02236](https://github.com/vitejs/vite/commit/5c0223636fa277d5daeb4d93c3f32d9f3cd69fc5)), closes [#&#8203;18853](https://github.com/vitejs/vite/issues/18853)
-   fix(html): allow unexpected question mark in tag name ([#&#8203;18852](https://github.com/vitejs/vite/issues/18852)) ([1b54e50](https://github.com/vitejs/vite/commit/1b54e506a44420d0c8a9e000cf45b1c4f5e33026)), closes [#&#8203;18852](https://github.com/vitejs/vite/issues/18852)
-   fix(module-runner): decode uri for file url passed to import ([#&#8203;18837](https://github.com/vitejs/vite/issues/18837)) ([88e49aa](https://github.com/vitejs/vite/commit/88e49aa0418cb3f6b579b744ba59daeda68432f3)), closes [#&#8203;18837](https://github.com/vitejs/vite/issues/18837)
-   refactor: fix logic errors found by no-unnecessary-condition rule ([#&#8203;18891](https://github.com/vitejs/vite/issues/18891)) ([ea802f8](https://github.com/vitejs/vite/commit/ea802f8f8bcf3771a35c1eaf687378613fbabb24)), closes [#&#8203;18891](https://github.com/vitejs/vite/issues/18891)
-   chore: fix duplicate attributes issue number in comment ([#&#8203;18860](https://github.com/vitejs/vite/issues/18860)) ([ffee618](https://github.com/vitejs/vite/commit/ffee61893cfe9f2b0db4aecf9ddb62ca79c80458)), closes [#&#8203;18860](https://github.com/vitejs/vite/issues/18860)

### [`v6.0.2`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small602-2024-12-02-small)

[Compare Source](https://github.com/vitejs/vite/compare/v6.0.1...v6.0.2)

-   chore: run typecheck in unit tests ([#&#8203;18858](https://github.com/vitejs/vite/issues/18858)) ([49f20bb](https://github.com/vitejs/vite/commit/49f20bb77749ec7b44344fd9c42d593ae20c78f0)), closes [#&#8203;18858](https://github.com/vitejs/vite/issues/18858)
-   chore: update broken links in changelog ([#&#8203;18802](https://github.com/vitejs/vite/issues/18802)) ([cb754f8](https://github.com/vitejs/vite/commit/cb754f8acc1b579dae9fe70a08e3ef53984402cc)), closes [#&#8203;18802](https://github.com/vitejs/vite/issues/18802)
-   chore: update broken links in changelog ([#&#8203;18804](https://github.com/vitejs/vite/issues/18804)) ([47ec49f](https://github.com/vitejs/vite/commit/47ec49ffa170cac5d04cf2eef01f45e0b5ccde03)), closes [#&#8203;18804](https://github.com/vitejs/vite/issues/18804)
-   fix: don't store temporary vite config file in `node_modules` if deno ([#&#8203;18823](https://github.com/vitejs/vite/issues/18823)) ([a20267b](https://github.com/vitejs/vite/commit/a20267bb93118468a2e20f0f77b77ed7bfa94165)), closes [#&#8203;18823](https://github.com/vitejs/vite/issues/18823)
-   fix(css): referencing aliased svg asset with lightningcss enabled errored ([#&#8203;18819](https://github.com/vitejs/vite/issues/18819)) ([ae68958](https://github.com/vitejs/vite/commit/ae6895869157e48b32088f0a1f85d2fddb2d713f)), closes [#&#8203;18819](https://github.com/vitejs/vite/issues/18819)
-   fix(manifest): use `style.css` as a key for the style file for `cssCodesplit: false` ([#&#8203;18820](https://github.com/vitejs/vite/issues/18820)) ([ec51115](https://github.com/vitejs/vite/commit/ec511152558cb573acf55e88e5244bdead1b5a17)), closes [#&#8203;18820](https://github.com/vitejs/vite/issues/18820)
-   fix(optimizer): resolve all promises when cancelled ([#&#8203;18826](https://github.com/vitejs/vite/issues/18826)) ([d6e6194](https://github.com/vitejs/vite/commit/d6e6194706f0e3a889caa9303de2293cc0f131b2)), closes [#&#8203;18826](https://github.com/vitejs/vite/issues/18826)
-   fix(resolve): don't set builtinModules to `external` by default ([#&#8203;18821](https://github.com/vitejs/vite/issues/18821)) ([2250ffa](https://github.com/vitejs/vite/commit/2250ffac62e55c89232d745d2f99ece539be9195)), closes [#&#8203;18821](https://github.com/vitejs/vite/issues/18821)
-   fix(ssr): set `ssr.target: 'webworker'` defaults as fallback ([#&#8203;18827](https://github.com/vitejs/vite/issues/18827)) ([b39e696](https://github.com/vitejs/vite/commit/b39e69638b3e2e658ff6712be83b549b28103c3d)), closes [#&#8203;18827](https://github.com/vitejs/vite/issues/18827)
-   feat(css): format lightningcss error ([#&#8203;18818](https://github.com/vitejs/vite/issues/18818)) ([dac7992](https://github.com/vitejs/vite/commit/dac7992e8725234007c7515f86f543992874c7b8)), closes [#&#8203;18818](https://github.com/vitejs/vite/issues/18818)
-   refactor: make properties of ResolvedServerOptions and ResolvedPreviewOptions required ([#&#8203;18796](https://github.com/vitejs/vite/issues/18796)) ([51a5569](https://github.com/vitejs/vite/commit/51a5569e66bd7f0de79ac14b9e902d1382ccd0aa)), closes [#&#8203;18796](https://github.com/vitejs/vite/issues/18796)

### [`v6.0.1`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small601-2024-11-27-small)

[Compare Source](https://github.com/vitejs/vite/compare/v6.0.0...v6.0.1)

-   fix: default empty server `proxy` prevents starting http2 server ([#&#8203;18788](https://github.com/vitejs/vite/issues/18788)) ([bbaf514](https://github.com/vitejs/vite/commit/bbaf514fb718952e0f17a15545c593125f1d1b9c)), closes [#&#8203;18788](https://github.com/vitejs/vite/issues/18788)
-   fix(manifest): do not override existing js manifest entry  ([#&#8203;18776](https://github.com/vitejs/vite/issues/18776)) ([3b0837e](https://github.com/vitejs/vite/commit/3b0837e0b997e14dacc347719353b8b0cea35bda)), closes [#&#8203;18776](https://github.com/vitejs/vite/issues/18776)
-   fix(server): close \_ssrCompatModuleRunner on server close ([#&#8203;18784](https://github.com/vitejs/vite/issues/18784)) ([9b4c410](https://github.com/vitejs/vite/commit/9b4c410dddb80c8858549355e175735976a82134)), closes [#&#8203;18784](https://github.com/vitejs/vite/issues/18784)
-   fix(server): skip hot channel client normalization for wsServer  ([#&#8203;18782](https://github.com/vitejs/vite/issues/18782)) ([cc7670a](https://github.com/vitejs/vite/commit/cc7670abaffeda1338cf3acfef2bc41a38c223a0)), closes [#&#8203;18782](https://github.com/vitejs/vite/issues/18782)
-   fix(worker): fix `applyToEnvironment` hooks on worker build ([#&#8203;18793](https://github.com/vitejs/vite/issues/18793)) ([0c6cdb0](https://github.com/vitejs/vite/commit/0c6cdb0f88d32ce041272977e786006008223f44)), closes [#&#8203;18793](https://github.com/vitejs/vite/issues/18793)
-   chore: flat v6 config file ([#&#8203;18777](https://github.com/vitejs/vite/issues/18777)) ([c7b3308](https://github.com/vitejs/vite/commit/c7b330832675ee6385ee1a8750762e496c8e18e6)), closes [#&#8203;18777](https://github.com/vitejs/vite/issues/18777)
-   chore: split changelog ([#&#8203;18787](https://github.com/vitejs/vite/issues/18787)) ([8542632](https://github.com/vitejs/vite/commit/8542632b3b205b61999b6d998928d5fb17ba90c4)), closes [#&#8203;18787](https://github.com/vitejs/vite/issues/18787)
-   chore: update changelog for v6 ([#&#8203;18773](https://github.com/vitejs/vite/issues/18773)) ([b254fac](https://github.com/vitejs/vite/commit/b254fac4aa35a3522aeafb3259e60acd050aeb51)), closes [#&#8203;18773](https://github.com/vitejs/vite/issues/18773)
-   revert: update moduleResolution value casing ([#&#8203;18409](https://github.com/vitejs/vite/issues/18409)) ([#&#8203;18774](https://github.com/vitejs/vite/issues/18774)) ([b0fc6e3](https://github.com/vitejs/vite/commit/b0fc6e3c2591a30360d3714263cf7cc0e2acbfdf)), closes [#&#8203;18409](https://github.com/vitejs/vite/issues/18409) [#&#8203;18774](https://github.com/vitejs/vite/issues/18774)

### [`v6.0.0`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#600-2024-11-26)

[Compare Source](https://github.com/vitejs/vite/compare/v5.4.11...v6.0.0)

![Vite 6 is out!](../../docs/public/og-image-announcing-vite6.png)

Today, we're taking another big step in Vite's story. The Vite [team](https://vite.dev/team), [contributors](https://github.com/vitejs/vite/graphs/contributors), and ecosystem partners are excited to announce the release of the next Vite major:

-   **[Vite 6.0 announcement blog post](https://vite.dev/blog/announcing-vite6.html)**
-   [Docs](https://vite.dev/)
-   Translations: [简体中文](https://cn.vite.dev/), [日本語](https://ja.vite.dev/), [Español](https://es.vite.dev/), [Português](https://pt.vite.dev/), [한국어](https://ko.vite.dev/), [Deutsch](https://de.vite.dev/)
-   [Migration Guide](https://vite.dev/guide/migration.html)

We want to thank the more than [1K contributors to Vite Core](https://github.com/vitejs/vite/graphs/contributors) and the maintainers and contributors of Vite plugins, integrations, tools, and translations that have helped us craft this new major. We invite you to get involved and help us improve Vite for the whole ecosystem. Learn more at our [Contributing Guide](https://github.com/vitejs/vite/blob/main/CONTRIBUTING.md).

##### Breaking Changes

-   feat!: drop node 21 support in version ranges ([#&#8203;18729](https://github.com/vitejs/vite/issues/18729)) ([a384d8f](https://github.com/vitejs/vite/commit/a384d8fd39162190675abcfea31ba657383a3d03)), closes [#&#8203;18729](https://github.com/vitejs/vite/issues/18729)
-   fix(deps)!: update dependency dotenv-expand to v12 ([#&#8203;18697](https://github.com/vitejs/vite/issues/18697)) ([0c658de](https://github.com/vitejs/vite/commit/0c658de41f4c1576c526a8c48a8ea0a019c6311c)), closes [#&#8203;18697](https://github.com/vitejs/vite/issues/18697)
-   feat(html)!: support more asset sources ([#&#8203;11138](https://github.com/vitejs/vite/issues/11138)) ([8a7af50](https://github.com/vitejs/vite/commit/8a7af50b5ddf72f21098406e9668bc609b323899)), closes [#&#8203;11138](https://github.com/vitejs/vite/issues/11138)
-   feat(resolve)!: allow removing conditions ([#&#8203;18395](https://github.com/vitejs/vite/issues/18395)) ([d002e7d](https://github.com/vitejs/vite/commit/d002e7d05a0f23110f9185b39222819bcdfffc16)), closes [#&#8203;18395](https://github.com/vitejs/vite/issues/18395)
-   refactor!: remove fs.cachedChecks option ([#&#8203;18493](https://github.com/vitejs/vite/issues/18493)) ([94b0857](https://github.com/vitejs/vite/commit/94b085735372588d5f92c7f4a8cf68e8291f2db0)), closes [#&#8203;18493](https://github.com/vitejs/vite/issues/18493)
-   feat!: proxy bypass with WebSocket ([#&#8203;18070](https://github.com/vitejs/vite/issues/18070)) ([3c9836d](https://github.com/vitejs/vite/commit/3c9836d96f118ff5748916241bc3871a54247ad1)), closes [#&#8203;18070](https://github.com/vitejs/vite/issues/18070)
-   feat!: support `file://` resolution ([#&#8203;18422](https://github.com/vitejs/vite/issues/18422)) ([6a7e313](https://github.com/vitejs/vite/commit/6a7e313754dce5faa5cd7c1e2343448cd7f3a2a2)), closes [#&#8203;18422](https://github.com/vitejs/vite/issues/18422)
-   feat!: update to chokidar v4 ([#&#8203;18453](https://github.com/vitejs/vite/issues/18453)) ([192d555](https://github.com/vitejs/vite/commit/192d555f88bba7576e8a40cc027e8a11e006079c)), closes [#&#8203;18453](https://github.com/vitejs/vite/issues/18453)
-   feat(lib)!: use package name for css output file name ([#&#8203;18488](https://github.com/vitejs/vite/issues/18488)) ([61cbf6f](https://github.com/vitejs/vite/commit/61cbf6f2cfcd5afc91fe0a0ad56abfc36a32f1ab)), closes [#&#8203;18488](https://github.com/vitejs/vite/issues/18488)
-   fix(css)!: remove default import in ssr dev ([#&#8203;17922](https://github.com/vitejs/vite/issues/17922)) ([eccf663](https://github.com/vitejs/vite/commit/eccf663e35a17458425860895bb30b3b0613ea96)), closes [#&#8203;17922](https://github.com/vitejs/vite/issues/17922)
-   chore(deps)!: update postcss-load-config to v6 ([#&#8203;15235](https://github.com/vitejs/vite/issues/15235)) ([3a27f62](https://github.com/vitejs/vite/commit/3a27f627df278f6c9778a55f44cb347665b65204)), closes [#&#8203;15235](https://github.com/vitejs/vite/issues/15235)
-   feat(css)!: change default sass api to modern/modern-compiler ([#&#8203;17937](https://github.com/vitejs/vite/issues/17937)) ([d4e0442](https://github.com/vitejs/vite/commit/d4e0442f9d6adc70b72ea0713dc8abb4b1f75ae4)), closes [#&#8203;17937](https://github.com/vitejs/vite/issues/17937)
-   feat(css)!: load postcss config within workspace root only ([#&#8203;18440](https://github.com/vitejs/vite/issues/18440)) ([d23a493](https://github.com/vitejs/vite/commit/d23a493cc4b54a2e2b2c1337b3b1f0c9b1be311e)), closes [#&#8203;18440](https://github.com/vitejs/vite/issues/18440)
-   feat(json)!: add `json.stringify: 'auto'` and make that the default ([#&#8203;18303](https://github.com/vitejs/vite/issues/18303)) ([b80daa7](https://github.com/vitejs/vite/commit/b80daa7c0970645dca569d572892648f66c6799c)), closes [#&#8203;18303](https://github.com/vitejs/vite/issues/18303)
-   fix!: default `build.cssMinify` to `'esbuild'` for SSR ([#&#8203;15637](https://github.com/vitejs/vite/issues/15637)) ([f1d3bf7](https://github.com/vitejs/vite/commit/f1d3bf74cc7f12e759442fd7111d07e2c0262a67)), closes [#&#8203;15637](https://github.com/vitejs/vite/issues/15637)
-   chore(deps)!: migrate `fast-glob` to `tinyglobby` ([#&#8203;18243](https://github.com/vitejs/vite/issues/18243)) ([6f74a3a](https://github.com/vitejs/vite/commit/6f74a3a1b2469a24a86743d16267b0cc3653bc4a)), closes [#&#8203;18243](https://github.com/vitejs/vite/issues/18243)
-   refactor!: bump minimal terser version to 5.16.0 ([#&#8203;18209](https://github.com/vitejs/vite/issues/18209)) ([19ce525](https://github.com/vitejs/vite/commit/19ce525b974328e4668ad8c6540c2a5ea652795b)), closes [#&#8203;18209](https://github.com/vitejs/vite/issues/18209)
-   feat!: Environment API ([#&#8203;16471](https://github.com/vitejs/vite/issues/16471)) ([242f550](https://github.com/vitejs/vite/commit/242f550eb46c93896fca6b55495578921e29a8af)), closes [#&#8203;16471](https://github.com/vitejs/vite/issues/16471)

##### Features

-   feat: add support for .cur type ([#&#8203;18680](https://github.com/vitejs/vite/issues/18680)) ([5ec9eed](https://github.com/vitejs/vite/commit/5ec9eedc80bbf39a33b498198ba07ed1bd9cacc7)), closes [#&#8203;18680](https://github.com/vitejs/vite/issues/18680)
-   feat: enable HMR by default on ModuleRunner side ([#&#8203;18749](https://github.com/vitejs/vite/issues/18749)) ([4d2abc7](https://github.com/vitejs/vite/commit/4d2abc7bba95cf516ce7341d5d8f349d61b75224)), closes [#&#8203;18749](https://github.com/vitejs/vite/issues/18749)
-   feat: support `module-sync` condition when loading config if enabled ([#&#8203;18650](https://github.com/vitejs/vite/issues/18650)) ([cf5028d](https://github.com/vitejs/vite/commit/cf5028d4bf0a0d59b4a98323beaadc268204056b)), closes [#&#8203;18650](https://github.com/vitejs/vite/issues/18650)
-   feat: add `isSsrTargetWebWorker` flag to `configEnvironment` hook ([#&#8203;18620](https://github.com/vitejs/vite/issues/18620)) ([3f5fab0](https://github.com/vitejs/vite/commit/3f5fab04aa64c0e9b45068e842f033583b365de0)), closes [#&#8203;18620](https://github.com/vitejs/vite/issues/18620)
-   feat: add `ssr.resolve.mainFields` option ([#&#8203;18646](https://github.com/vitejs/vite/issues/18646)) ([a6f5f5b](https://github.com/vitejs/vite/commit/a6f5f5baca7a5d2064f5f4cb689764ad939fab4b)), closes [#&#8203;18646](https://github.com/vitejs/vite/issues/18646)
-   feat: expose default mainFields/conditions ([#&#8203;18648](https://github.com/vitejs/vite/issues/18648)) ([c12c653](https://github.com/vitejs/vite/commit/c12c653ca5fab354e0f71394e2fbe636dccf6b2f)), closes [#&#8203;18648](https://github.com/vitejs/vite/issues/18648)
-   feat: extended applyToEnvironment and perEnvironmentPlugin ([#&#8203;18544](https://github.com/vitejs/vite/issues/18544)) ([8fa70cd](https://github.com/vitejs/vite/commit/8fa70cdfa65ce8254ab8da8be0d92614126764c0)), closes [#&#8203;18544](https://github.com/vitejs/vite/issues/18544)
-   feat: show error when accessing variables not exposed in CJS build ([#&#8203;18649](https://github.com/vitejs/vite/issues/18649)) ([87c5502](https://github.com/vitejs/vite/commit/87c55022490d4710934c482abf5fbd4fcda9c3c9)), closes [#&#8203;18649](https://github.com/vitejs/vite/issues/18649)
-   feat(optimizer): allow users to specify their esbuild `platform` option ([#&#8203;18611](https://github.com/vitejs/vite/issues/18611)) ([0924879](https://github.com/vitejs/vite/commit/09248795ca79a7053b803af8977c3422f5cd5824)), closes [#&#8203;18611](https://github.com/vitejs/vite/issues/18611)
-   refactor: introduce `mergeWithDefaults` and organize how default values for config options are set ( ([0e1f437](https://github.com/vitejs/vite/commit/0e1f437d53683b57f0157ce3ff0b0f02acabb408)), closes [#&#8203;18550](https://github.com/vitejs/vite/issues/18550)
-   build: ignore cjs warning ([#&#8203;18660](https://github.com/vitejs/vite/issues/18660)) ([33b0d5a](https://github.com/vitejs/vite/commit/33b0d5a6ca18e9f7c27b0159decd84fee3859e09)), closes [#&#8203;18660](https://github.com/vitejs/vite/issues/18660)
-   feat: use a single transport for fetchModule and HMR support ([#&#8203;18362](https://github.com/vitejs/vite/issues/18362)) ([78dc490](https://github.com/vitejs/vite/commit/78dc4902ffef7f316e84d21648b04dc62dd0ae0a)), closes [#&#8203;18362](https://github.com/vitejs/vite/issues/18362)
-   feat(asset): add `?inline` and `?no-inline` queries to control inlining ([#&#8203;15454](https://github.com/vitejs/vite/issues/15454)) ([9162172](https://github.com/vitejs/vite/commit/9162172e039ae67ad4ee8dce18f04b7444f7d9de)), closes [#&#8203;15454](https://github.com/vitejs/vite/issues/15454)
-   feat(asset): inline svg in dev if within limit ([#&#8203;18581](https://github.com/vitejs/vite/issues/18581)) ([f08b146](https://github.com/vitejs/vite/commit/f08b1463db50f39b571faa871d05c92b10f3434c)), closes [#&#8203;18581](https://github.com/vitejs/vite/issues/18581)
-   feat: log complete config in debug mode ([#&#8203;18289](https://github.com/vitejs/vite/issues/18289)) ([04f6736](https://github.com/vitejs/vite/commit/04f6736fd7ac3da22141929c01a151f5a6fe4e45)), closes [#&#8203;18289](https://github.com/vitejs/vite/issues/18289)
-   feat(html): support `vite-ignore` attribute to opt-out of processing ([#&#8203;18494](https://github.com/vitejs/vite/issues/18494)) ([d951310](https://github.com/vitejs/vite/commit/d9513104e21175e1d23e0f614df55cd53291ab4e)), closes [#&#8203;18494](https://github.com/vitejs/vite/issues/18494)
-   feat: allow custom `console` in `createLogger` ([#&#8203;18379](https://github.com/vitejs/vite/issues/18379)) ([0c497d9](https://github.com/vitejs/vite/commit/0c497d9cb63bd4a6bb8e01c0e3b843890a239d23)), closes [#&#8203;18379](https://github.com/vitejs/vite/issues/18379)
-   feat: read `sec-fetch-dest` header to detect JS in transform ([#&#8203;9981](https://github.com/vitejs/vite/issues/9981)) ([e51dc40](https://github.com/vitejs/vite/commit/e51dc40b5907cf14d7aefaaf01fb8865a852ef15)), closes [#&#8203;9981](https://github.com/vitejs/vite/issues/9981)
-   feat(css): add more stricter typing of lightningcss ([#&#8203;18460](https://github.com/vitejs/vite/issues/18460)) ([b9b925e](https://github.com/vitejs/vite/commit/b9b925eb3f911ab63972124dc8ab0455449b925d)), closes [#&#8203;18460](https://github.com/vitejs/vite/issues/18460)
-   feat: add .git to deny list by default ([#&#8203;18382](https://github.com/vitejs/vite/issues/18382)) ([105ca12](https://github.com/vitejs/vite/commit/105ca12b34e466dc9de838643954a873ac1ce804)), closes [#&#8203;18382](https://github.com/vitejs/vite/issues/18382)
-   feat: add `environment::listen` ([#&#8203;18263](https://github.com/vitejs/vite/issues/18263)) ([4d5f51d](https://github.com/vitejs/vite/commit/4d5f51d13f92cc8224a028c27df12834a0667659)), closes [#&#8203;18263](https://github.com/vitejs/vite/issues/18263)
-   feat: enable dependencies discovery and pre-bundling in ssr environments ([#&#8203;18358](https://github.com/vitejs/vite/issues/18358)) ([9b21f69](https://github.com/vitejs/vite/commit/9b21f69405271f1b864fa934a96adcb0e1a2bc4d)), closes [#&#8203;18358](https://github.com/vitejs/vite/issues/18358)
-   feat: restrict characters useable for environment name ([#&#8203;18255](https://github.com/vitejs/vite/issues/18255)) ([9ab6180](https://github.com/vitejs/vite/commit/9ab6180d3a20be71eb7aedef000f8c4ae3591c40)), closes [#&#8203;18255](https://github.com/vitejs/vite/issues/18255)
-   feat: support arbitrary module namespace identifier imports from cjs deps ([#&#8203;18236](https://github.com/vitejs/vite/issues/18236)) ([4389a91](https://github.com/vitejs/vite/commit/4389a917f8f5e8e67222809fb7b166bb97f6d02c)), closes [#&#8203;18236](https://github.com/vitejs/vite/issues/18236)
-   feat: introduce RunnableDevEnvironment ([#&#8203;18190](https://github.com/vitejs/vite/issues/18190)) ([fb292f2](https://github.com/vitejs/vite/commit/fb292f226f988e80fee4f4aea878eb3d5d229022)), closes [#&#8203;18190](https://github.com/vitejs/vite/issues/18190)
-   feat: support `this.environment` in `options` and `onLog` hook ([#&#8203;18142](https://github.com/vitejs/vite/issues/18142)) ([7722c06](https://github.com/vitejs/vite/commit/7722c061646bc8587f55f560bfe06b2a9643639a)), closes [#&#8203;18142](https://github.com/vitejs/vite/issues/18142)
-   feat: expose `EnvironmentOptions` type ([#&#8203;18080](https://github.com/vitejs/vite/issues/18080)) ([35cf59c](https://github.com/vitejs/vite/commit/35cf59c9d53ef544eb5f2fe2f9ff4d6cb225e63b)), closes [#&#8203;18080](https://github.com/vitejs/vite/issues/18080)
-   feat(css): support es2023 build target for lightningcss ([#&#8203;17998](https://github.com/vitejs/vite/issues/17998)) ([1a76300](https://github.com/vitejs/vite/commit/1a76300cd16827f0640924fdc21747ce140c35fb)), closes [#&#8203;17998](https://github.com/vitejs/vite/issues/17998)

##### Performance

-   perf: reduce bundle size for `Object.keys(import.meta.glob(...))` / \`Object.values(import.meta.glob( ([ed99a2c](https://github.com/vitejs/vite/commit/ed99a2cd31e8d3c2b791885bcc4b188570539e45)), closes [#&#8203;18666](https://github.com/vitejs/vite/issues/18666)
-   perf(worker): inline worker without base64 ([#&#8203;18752](https://github.com/vitejs/vite/issues/18752)) ([90c66c9](https://github.com/vitejs/vite/commit/90c66c95aba3d2edd86637a77adc699f3fd6c1ff)), closes [#&#8203;18752](https://github.com/vitejs/vite/issues/18752)
-   perf: remove strip-ansi for a node built-in ([#&#8203;18630](https://github.com/vitejs/vite/issues/18630)) ([5182272](https://github.com/vitejs/vite/commit/5182272d52fc092a6219c8efe73ecb3f8e65a0b5)), closes [#&#8203;18630](https://github.com/vitejs/vite/issues/18630)
-   perf(css): skip style.css extraction if code-split css ([#&#8203;18470](https://github.com/vitejs/vite/issues/18470)) ([34fdb6b](https://github.com/vitejs/vite/commit/34fdb6bef558724330d2411b9666facef669b3a0)), closes [#&#8203;18470](https://github.com/vitejs/vite/issues/18470)
-   perf: call `module.enableCompileCache()` ([#&#8203;18323](https://github.com/vitejs/vite/issues/18323)) ([18f1dad](https://github.com/vitejs/vite/commit/18f1daddd125b07dcb8c32056ee0cec61bd65971)), closes [#&#8203;18323](https://github.com/vitejs/vite/issues/18323)
-   perf: use `crypto.hash` when available ([#&#8203;18317](https://github.com/vitejs/vite/issues/18317)) ([2a14884](https://github.com/vitejs/vite/commit/2a148844cf2382a5377b75066351f00207843352)), closes [#&#8203;18317](https://github.com/vitejs/vite/issues/18317)
-   build: reduce package size ([#&#8203;18517](https://github.com/vitejs/vite/issues/18517)) ([b83f60b](https://github.com/vitejs/vite/commit/b83f60b159f3b6f4a61db180fa03cc5b20bd110f)), closes [#&#8203;18517](https://github.com/vitejs/vite/issues/18517)

##### Fixes

-   fix: `createRunnableDevEnvironment` returns `RunnableDevEnvironment`, not `DevEnvironment` ([#&#8203;18673](https://github.com/vitejs/vite/issues/18673)) ([74221c3](https://github.com/vitejs/vite/commit/74221c391bffd61b9ef39b7c0f9ea2e405913a6f)), closes [#&#8203;18673](https://github.com/vitejs/vite/issues/18673)
-   fix: `getModulesByFile` should return a `serverModule` ([#&#8203;18715](https://github.com/vitejs/vite/issues/18715)) ([b80d5ec](https://github.com/vitejs/vite/commit/b80d5ecbbcc374bd8f32b2ed5ceb3cbfffaae77b)), closes [#&#8203;18715](https://github.com/vitejs/vite/issues/18715)
-   fix: catch error in full reload handler ([#&#8203;18713](https://github.com/vitejs/vite/issues/18713)) ([a10e741](https://github.com/vitejs/vite/commit/a10e7410656d3614cbfd07ba772776ff334a8d60)), closes [#&#8203;18713](https://github.com/vitejs/vite/issues/18713)
-   fix: display pre-transform error details ([#&#8203;18764](https://github.com/vitejs/vite/issues/18764)) ([554f45f](https://github.com/vitejs/vite/commit/554f45f4d820c57c0874ebe48ef2fddfafdd0750)), closes [#&#8203;18764](https://github.com/vitejs/vite/issues/18764)
-   fix: exit code on `SIGTERM` ([#&#8203;18741](https://github.com/vitejs/vite/issues/18741)) ([cc55e36](https://github.com/vitejs/vite/commit/cc55e36dd39fef134568f53acc66514cbb7175ea)), closes [#&#8203;18741](https://github.com/vitejs/vite/issues/18741)
-   fix: expose missing `InterceptorOptions` type ([#&#8203;18766](https://github.com/vitejs/vite/issues/18766)) ([6252c60](https://github.com/vitejs/vite/commit/6252c6035695365c93773fbe06a4b2a307e86368)), closes [#&#8203;18766](https://github.com/vitejs/vite/issues/18766)
-   fix: log error when send in module runner failed ([#&#8203;18753](https://github.com/vitejs/vite/issues/18753)) ([ba821bb](https://github.com/vitejs/vite/commit/ba821bb63eca6d8a9199ee2253ef2607375f5702)), closes [#&#8203;18753](https://github.com/vitejs/vite/issues/18753)
-   fix(client): overlay not appearing when multiple vite clients were loaded ([#&#8203;18647](https://github.com/vitejs/vite/issues/18647)) ([27d70b5](https://github.com/vitejs/vite/commit/27d70b5fa61f1c1a836d52809549cb57569f42a4)), closes [#&#8203;18647](https://github.com/vitejs/vite/issues/18647)
-   fix(deps): update all non-major dependencies ([#&#8203;18691](https://github.com/vitejs/vite/issues/18691)) ([f005461](https://github.com/vitejs/vite/commit/f005461ecce89ada21cb0c021f7af460b5479736)), closes [#&#8203;18691](https://github.com/vitejs/vite/issues/18691)
-   fix(html): fix inline proxy modules invalidation ([#&#8203;18696](https://github.com/vitejs/vite/issues/18696)) ([8ab04b7](https://github.com/vitejs/vite/commit/8ab04b70ada119fbca2fc5a53c36f233423febbe)), closes [#&#8203;18696](https://github.com/vitejs/vite/issues/18696)
-   fix(module-runner): make evaluator optional ([#&#8203;18672](https://github.com/vitejs/vite/issues/18672)) ([fd1283f](https://github.com/vitejs/vite/commit/fd1283fe27cc1a19b5c7d9d72664832e4daa1bbf)), closes [#&#8203;18672](https://github.com/vitejs/vite/issues/18672)
-   fix(optimizer): detect npm / yarn / pnpm dependency changes correctly ([#&#8203;17336](https://github.com/vitejs/vite/issues/17336)) ([#&#8203;18560](https://github.com/vitejs/vite/issues/18560)) ([818cf3e](https://github.com/vitejs/vite/commit/818cf3e7bf1b6c2dc56e7cd8f056bc1d185c2cd7)), closes [#&#8203;17336](https://github.com/vitejs/vite/issues/17336) [#&#8203;18560](https://github.com/vitejs/vite/issues/18560)
-   fix(optimizer): trigger onCrawlEnd after manual included deps are registered ([#&#8203;18733](https://github.com/vitejs/vite/issues/18733)) ([dc60410](https://github.com/vitejs/vite/commit/dc6041099ccd5767764fb8c99a169869bbd13f16)), closes [#&#8203;18733](https://github.com/vitejs/vite/issues/18733)
-   fix(optimizer): workaround firefox's false warning for no sources source map ([#&#8203;18665](https://github.com/vitejs/vite/issues/18665)) ([473424e](https://github.com/vitejs/vite/commit/473424ee8d6b743c1565bf0749deb5d9fbedcea7)), closes [#&#8203;18665](https://github.com/vitejs/vite/issues/18665)
-   fix(ssr): replace `__vite_ssr_identity__` with `(0, ...)` and inject `;` between statements ([#&#8203;18748](https://github.com/vitejs/vite/issues/18748)) ([94546be](https://github.com/vitejs/vite/commit/94546be18354a457bced5107aa31533b09e304ec)), closes [#&#8203;18748](https://github.com/vitejs/vite/issues/18748)
-   refactor: first character judgment replacement regexp ([#&#8203;18658](https://github.com/vitejs/vite/issues/18658)) ([58f1df3](https://github.com/vitejs/vite/commit/58f1df3288b0f9584bb413dd34b8d65671258f6f)), closes [#&#8203;18658](https://github.com/vitejs/vite/issues/18658)
-   refactor(resolve): remove `allowLinkedExternal` parameter from `tryNodeResolve` ([#&#8203;18670](https://github.com/vitejs/vite/issues/18670)) ([b74d363](https://github.com/vitejs/vite/commit/b74d3632693b6a829b4d1cdc2a9d4ba8234c093b)), closes [#&#8203;18670](https://github.com/vitejs/vite/issues/18670)
-   revert: use chokidar v3 ([#&#8203;18659](https://github.com/vitejs/vite/issues/18659)) ([49783da](https://github.com/vitejs/vite/commit/49783da298bc45f3f3c5ad4ce2fb1260ee8856bb)), closes [#&#8203;18659](https://github.com/vitejs/vite/issues/18659)
-   fix: cjs build for perEnvironmentState et al ([#&#8203;18656](https://github.com/vitejs/vite/issues/18656)) ([95c4b3c](https://github.com/vitejs/vite/commit/95c4b3c371dc7fb12c28cb1307f6f389887eb1e1)), closes [#&#8203;18656](https://github.com/vitejs/vite/issues/18656)
-   fix: include more modules to prefix-only module list ([#&#8203;18667](https://github.com/vitejs/vite/issues/18667)) ([5a2103f](https://github.com/vitejs/vite/commit/5a2103f0d486a7725c23c70710b11559c00e9b93)), closes [#&#8203;18667](https://github.com/vitejs/vite/issues/18667)
-   fix(html): externalize `rollup.external` scripts correctly ([#&#8203;18618](https://github.com/vitejs/vite/issues/18618)) ([55461b4](https://github.com/vitejs/vite/commit/55461b43329db6a5e737eab591163a8681ba9230)), closes [#&#8203;18618](https://github.com/vitejs/vite/issues/18618)
-   fix(ssr): format `ssrTransform` parse error  ([#&#8203;18644](https://github.com/vitejs/vite/issues/18644)) ([d9be921](https://github.com/vitejs/vite/commit/d9be92187cb17d740856af27d0ab60c84e04d58c)), closes [#&#8203;18644](https://github.com/vitejs/vite/issues/18644)
-   fix(ssr): preserve fetchModule error details ([#&#8203;18626](https://github.com/vitejs/vite/issues/18626)) ([866a433](https://github.com/vitejs/vite/commit/866a433a34ab2f6d2910506e781b346091de1b9e)), closes [#&#8203;18626](https://github.com/vitejs/vite/issues/18626)
-   fix: browser field should not be included by default for `consumer: 'server'` ([#&#8203;18575](https://github.com/vitejs/vite/issues/18575)) ([87b2347](https://github.com/vitejs/vite/commit/87b2347a13ea8ae8282f0f1e2233212c040bfed8)), closes [#&#8203;18575](https://github.com/vitejs/vite/issues/18575)
-   fix: use `server.perEnvironmentStartEndDuringDev` ([#&#8203;18549](https://github.com/vitejs/vite/issues/18549)) ([fe30349](https://github.com/vitejs/vite/commit/fe30349d350ef08bccd56404ccc3e6d6e0a2e156)), closes [#&#8203;18549](https://github.com/vitejs/vite/issues/18549)
-   fix(client): detect ws close correctly ([#&#8203;18548](https://github.com/vitejs/vite/issues/18548)) ([637d31b](https://github.com/vitejs/vite/commit/637d31bcc59d964e51f7969093cc369deee88ca1)), closes [#&#8203;18548](https://github.com/vitejs/vite/issues/18548)
-   fix(resolve): run ensureVersionQuery for SSR ([#&#8203;18591](https://github.com/vitejs/vite/issues/18591)) ([63207e5](https://github.com/vitejs/vite/commit/63207e5d0fbedc8ddddb7d1faaa8ea9a45a118d4)), closes [#&#8203;18591](https://github.com/vitejs/vite/issues/18591)
-   refactor(resolve): remove `environmentsOptions` parameter ([#&#8203;18590](https://github.com/vitejs/vite/issues/18590)) ([3ef0bf1](https://github.com/vitejs/vite/commit/3ef0bf19a3457c46395bdcb2201bbf32807d7231)), closes [#&#8203;18590](https://github.com/vitejs/vite/issues/18590)
-   fix: allow nested dependency selector to be used for `optimizeDeps.include` for SSR ([#&#8203;18506](https://github.com/vitejs/vite/issues/18506)) ([826c81a](https://github.com/vitejs/vite/commit/826c81a40bb25914d55cd2e96b548f1a2c384a19)), closes [#&#8203;18506](https://github.com/vitejs/vite/issues/18506)
-   fix: asset `new URL(,import.meta.url)` match ([#&#8203;18194](https://github.com/vitejs/vite/issues/18194)) ([5286a90](https://github.com/vitejs/vite/commit/5286a90a3c1b693384f99903582a1f70b7b44945)), closes [#&#8203;18194](https://github.com/vitejs/vite/issues/18194)
-   fix: close watcher if it's disabled ([#&#8203;18521](https://github.com/vitejs/vite/issues/18521)) ([85bd0e9](https://github.com/vitejs/vite/commit/85bd0e9b0dc637c7645f2b56f93071d6e1ec149c)), closes [#&#8203;18521](https://github.com/vitejs/vite/issues/18521)
-   fix(config): write temporary vite config to node_modules ([#&#8203;18509](https://github.com/vitejs/vite/issues/18509)) ([72eaef5](https://github.com/vitejs/vite/commit/72eaef5300d20b7163050461733c3208a4013e1e)), closes [#&#8203;18509](https://github.com/vitejs/vite/issues/18509)
-   fix(css): `cssCodeSplit` uses the current environment configuration ([#&#8203;18486](https://github.com/vitejs/vite/issues/18486)) ([eefe895](https://github.com/vitejs/vite/commit/eefe8957167681b85f0e1b07bc5feefa307cccb0)), closes [#&#8203;18486](https://github.com/vitejs/vite/issues/18486)
-   fix(json): don't `json.stringify` arrays ([#&#8203;18541](https://github.com/vitejs/vite/issues/18541)) ([fa50b03](https://github.com/vitejs/vite/commit/fa50b03390dae280293174f65f850522599b9ab7)), closes [#&#8203;18541](https://github.com/vitejs/vite/issues/18541)
-   fix(less): prevent rebasing `@import url(...)` ([#&#8203;17857](https://github.com/vitejs/vite/issues/17857)) ([aec5fdd](https://github.com/vitejs/vite/commit/aec5fdd72e3aeb2aa26796001b98f3f330be86d1)), closes [#&#8203;17857](https://github.com/vitejs/vite/issues/17857)
-   fix(lib): only resolve css bundle name if have styles ([#&#8203;18530](https://github.com/vitejs/vite/issues/18530)) ([5d6dc49](https://github.com/vitejs/vite/commit/5d6dc491b6bb78613694eaf686e2e305b71af5e1)), closes [#&#8203;18530](https://github.com/vitejs/vite/issues/18530)
-   fix(scss): improve error logs ([#&#8203;18522](https://github.com/vitejs/vite/issues/18522)) ([3194a6a](https://github.com/vitejs/vite/commit/3194a6a60714a3978f5e4b39d6223f32a8dc01ef)), closes [#&#8203;18522](https://github.com/vitejs/vite/issues/18522)
-   refactor: client-only top-level warmup ([#&#8203;18524](https://github.com/vitejs/vite/issues/18524)) ([a50ff60](https://github.com/vitejs/vite/commit/a50ff6000bca46a6fe429f2c3a98c486ea5ebc8e)), closes [#&#8203;18524](https://github.com/vitejs/vite/issues/18524)
-   fix: `define` in environment config was not working ([#&#8203;18515](https://github.com/vitejs/vite/issues/18515)) ([052799e](https://github.com/vitejs/vite/commit/052799e8939cfcdd7a7ff48daf45a766bf6cc546)), closes [#&#8203;18515](https://github.com/vitejs/vite/issues/18515)
-   fix: consider URLs with any protocol to be external ([#&#8203;17369](https://github.com/vitejs/vite/issues/17369)) ([a0336bd](https://github.com/vitejs/vite/commit/a0336bd5197bb4427251be4c975e30fb596c658f)), closes [#&#8203;17369](https://github.com/vitejs/vite/issues/17369)
-   fix: use picomatch to align with tinyglobby ([#&#8203;18503](https://github.com/vitejs/vite/issues/18503)) ([437795d](https://github.com/vitejs/vite/commit/437795db8307ce4491d066bcaaa5bd9432193773)), closes [#&#8203;18503](https://github.com/vitejs/vite/issues/18503)
-   fix(build): apply resolve.external/noExternal to server environments ([#&#8203;18495](https://github.com/vitejs/vite/issues/18495)) ([5a967cb](https://github.com/vitejs/vite/commit/5a967cb596c7c4b0548be1d9025bc1e34b36169a)), closes [#&#8203;18495](https://github.com/vitejs/vite/issues/18495)
-   fix(config): remove error if require resolve to esm ([#&#8203;18437](https://github.com/vitejs/vite/issues/18437)) ([f886f75](https://github.com/vitejs/vite/commit/f886f75396cdb5a43ec5377bbbaaffc0e8ae03e9)), closes [#&#8203;18437](https://github.com/vitejs/vite/issues/18437)
-   refactor: separate tsconfck caches per config in a weakmap ([#&#8203;17317](https://github.com/vitejs/vite/issues/17317)) ([b9b01d5](https://github.com/vitejs/vite/commit/b9b01d57fdaf5d291c78a8156e17b534c8c51eb4)), closes [#&#8203;17317](https://github.com/vitejs/vite/issues/17317)
-   fix: handle warmup glob hang ([#&#8203;18462](https://github.com/vitejs/vite/issues/18462)) ([409fa5c](https://github.com/vitejs/vite/commit/409fa5c9dee0e394bcdc3b111f5b2e4261131ca0)), closes [#&#8203;18462](https://github.com/vitejs/vite/issues/18462)
-   fix: return the same instance of ModuleNode for the same EnvironmentModuleNode ([#&#8203;18455](https://github.com/vitejs/vite/issues/18455)) ([5ead461](https://github.com/vitejs/vite/commit/5ead461b374d76ceb134063477eaf3f97fe3da97)), closes [#&#8203;18455](https://github.com/vitejs/vite/issues/18455)
-   fix: set scripts imported by HTML moduleSideEffects=true ([#&#8203;18411](https://github.com/vitejs/vite/issues/18411)) ([2ebe4b4](https://github.com/vitejs/vite/commit/2ebe4b44430dd311028f72520ac977bb202ce50b)), closes [#&#8203;18411](https://github.com/vitejs/vite/issues/18411)
-   fix: use websocket to test server liveness before client reload ([#&#8203;17891](https://github.com/vitejs/vite/issues/17891)) ([7f9f8c6](https://github.com/vitejs/vite/commit/7f9f8c6851d1eb49a72dcb6c134873148a2e81eb)), closes [#&#8203;17891](https://github.com/vitejs/vite/issues/17891)
-   fix(css): `cssCodeSplit` in `environments.xxx.build` is invalid ([#&#8203;18464](https://github.com/vitejs/vite/issues/18464)) ([993e71c](https://github.com/vitejs/vite/commit/993e71c4cb227bd8c347b918f52ccd83f85a645a)), closes [#&#8203;18464](https://github.com/vitejs/vite/issues/18464)
-   fix(css): make sass types work with sass-embedded ([#&#8203;18459](https://github.com/vitejs/vite/issues/18459)) ([89f8303](https://github.com/vitejs/vite/commit/89f8303e727791aa7be6f35833a708b6a50e9120)), closes [#&#8203;18459](https://github.com/vitejs/vite/issues/18459)
-   fix(deps): update all non-major dependencies ([#&#8203;18484](https://github.com/vitejs/vite/issues/18484)) ([2ec12df](https://github.com/vitejs/vite/commit/2ec12df98d07eb4c986737e86a4a9f8066724658)), closes [#&#8203;18484](https://github.com/vitejs/vite/issues/18484)
-   fix(manifest): non entry CSS chunk src was wrong ([#&#8203;18133](https://github.com/vitejs/vite/issues/18133)) ([c148676](https://github.com/vitejs/vite/commit/c148676c90dc4823bc6bdeb8ba1e36386c5d9654)), closes [#&#8203;18133](https://github.com/vitejs/vite/issues/18133)
-   fix(module-runner): delay function eval until module runner instantiation ([#&#8203;18480](https://github.com/vitejs/vite/issues/18480)) ([472afbd](https://github.com/vitejs/vite/commit/472afbd010db3f1c7a59826c7bf4067191b7f48a)), closes [#&#8203;18480](https://github.com/vitejs/vite/issues/18480)
-   fix(plugins): noop if config hook returns same config reference ([#&#8203;18467](https://github.com/vitejs/vite/issues/18467)) ([bd540d5](https://github.com/vitejs/vite/commit/bd540d52eb609ca12dad8e2f3fe8011821bda878)), closes [#&#8203;18467](https://github.com/vitejs/vite/issues/18467)
-   fix: add typing to `CSSOptions.preprocessorOptions` ([#&#8203;18001](https://github.com/vitejs/vite/issues/18001)) ([7eeb6f2](https://github.com/vitejs/vite/commit/7eeb6f2f97abf5dfc71c225b9cff9779baf2ed2f)), closes [#&#8203;18001](https://github.com/vitejs/vite/issues/18001)
-   fix(dev): prevent double URL encoding in server.open on macOS ([#&#8203;18443](https://github.com/vitejs/vite/issues/18443)) ([56b7176](https://github.com/vitejs/vite/commit/56b71768f3ee498962fba898804086299382bb59)), closes [#&#8203;18443](https://github.com/vitejs/vite/issues/18443)
-   fix(preview): set resolvedUrls null after close ([#&#8203;18445](https://github.com/vitejs/vite/issues/18445)) ([65014a3](https://github.com/vitejs/vite/commit/65014a32ef618619c5a34b729d67340d9253bdd5)), closes [#&#8203;18445](https://github.com/vitejs/vite/issues/18445)
-   fix(ssr): inject identity function at the top ([#&#8203;18449](https://github.com/vitejs/vite/issues/18449)) ([0ab20a3](https://github.com/vitejs/vite/commit/0ab20a3ee26eacf302415b3087732497d0a2f358)), closes [#&#8203;18449](https://github.com/vitejs/vite/issues/18449)
-   fix(ssr): preserve source maps for hoisted imports (fix [#&#8203;16355](https://github.com/vitejs/vite/issues/16355)) ([#&#8203;16356](https://github.com/vitejs/vite/issues/16356)) ([8e382a6](https://github.com/vitejs/vite/commit/8e382a6a1fed2cd41051b81f9cd9c94b484352a5)), closes [#&#8203;16355](https://github.com/vitejs/vite/issues/16355) [#&#8203;16356](https://github.com/vitejs/vite/issues/16356)
-   fix: augment hash for CSS files to prevent chromium erroring by loading previous files ([#&#8203;18367](https://github.com/vitejs/vite/issues/18367)) ([a569f42](https://github.com/vitejs/vite/commit/a569f42ee93229308be7a327b7a71e79f3d58b01)), closes [#&#8203;18367](https://github.com/vitejs/vite/issues/18367)
-   fix: more robust plugin.sharedDuringBuild ([#&#8203;18351](https://github.com/vitejs/vite/issues/18351)) ([47b1270](https://github.com/vitejs/vite/commit/47b12706ce2d0c009d6078a61e16e81a04c9f49c)), closes [#&#8203;18351](https://github.com/vitejs/vite/issues/18351)
-   fix(cli): `--watch` should not override `build.watch` options ([#&#8203;18390](https://github.com/vitejs/vite/issues/18390)) ([b2965c8](https://github.com/vitejs/vite/commit/b2965c8e9f74410bc8047a05528c74b68a3856d7)), closes [#&#8203;18390](https://github.com/vitejs/vite/issues/18390)
-   fix(css): don't transform sass function calls with namespace ([#&#8203;18414](https://github.com/vitejs/vite/issues/18414)) ([dbb2604](https://github.com/vitejs/vite/commit/dbb260499f894d495bcff3dcdf5635d015a2f563)), closes [#&#8203;18414](https://github.com/vitejs/vite/issues/18414)
-   fix(deps): update `open` dependency to 10.1.0 ([#&#8203;18349](https://github.com/vitejs/vite/issues/18349)) ([5cca4bf](https://github.com/vitejs/vite/commit/5cca4bfd3202c7aea690acf63f60bfe57fa165de)), closes [#&#8203;18349](https://github.com/vitejs/vite/issues/18349)
-   fix(deps): update all non-major dependencies ([#&#8203;18345](https://github.com/vitejs/vite/issues/18345)) ([5552583](https://github.com/vitejs/vite/commit/5552583a2272cd4208b30ad60e99d984e34645f0)), closes [#&#8203;18345](https://github.com/vitejs/vite/issues/18345)
-   fix(ssr): `this` in exported function should be `undefined` ([#&#8203;18329](https://github.com/vitejs/vite/issues/18329)) ([bae6a37](https://github.com/vitejs/vite/commit/bae6a37628c4870f3db92351e8af2a7b4a07e248)), closes [#&#8203;18329](https://github.com/vitejs/vite/issues/18329)
-   fix(worker): rewrite rollup `output.format` with `worker.format` on worker build error ([#&#8203;18165](https://github.com/vitejs/vite/issues/18165)) ([dc82334](https://github.com/vitejs/vite/commit/dc823347bb857a9f63eee7e027a52236d7e331e0)), closes [#&#8203;18165](https://github.com/vitejs/vite/issues/18165)
-   fix: `injectQuery` double encoding ([#&#8203;18246](https://github.com/vitejs/vite/issues/18246)) ([2c5f948](https://github.com/vitejs/vite/commit/2c5f948d0646f6a0237570ab5d36b06d31cb94c9)), closes [#&#8203;18246](https://github.com/vitejs/vite/issues/18246)
-   fix: add position to import analysis resolve exception ([#&#8203;18344](https://github.com/vitejs/vite/issues/18344)) ([0fe95d4](https://github.com/vitejs/vite/commit/0fe95d4a71930cf55acd628efef59e6eae0f77f7)), closes [#&#8203;18344](https://github.com/vitejs/vite/issues/18344)
-   fix: destroy the runner when runnable environment is closed ([#&#8203;18282](https://github.com/vitejs/vite/issues/18282)) ([5212d09](https://github.com/vitejs/vite/commit/5212d09579a82bc09b149c77e996d0e5c3972455)), closes [#&#8203;18282](https://github.com/vitejs/vite/issues/18282)
-   fix: handle yarn command fail when root does not exist ([#&#8203;18141](https://github.com/vitejs/vite/issues/18141)) ([460aaff](https://github.com/vitejs/vite/commit/460aaffbf134a9eda6e092a564afc2eeebf8f935)), closes [#&#8203;18141](https://github.com/vitejs/vite/issues/18141)
-   fix: make it easier to configure environment runner ([#&#8203;18273](https://github.com/vitejs/vite/issues/18273)) ([fb35a78](https://github.com/vitejs/vite/commit/fb35a7800e21ed2c6f9d0f843898afa1fcc87795)), closes [#&#8203;18273](https://github.com/vitejs/vite/issues/18273)
-   fix(assets): make srcset parsing HTML spec compliant ([#&#8203;16323](https://github.com/vitejs/vite/issues/16323)) ([#&#8203;18242](https://github.com/vitejs/vite/issues/18242)) ([0e6d4a5](https://github.com/vitejs/vite/commit/0e6d4a5e23cdfb2ec433f687e455b9827269527c)), closes [#&#8203;16323](https://github.com/vitejs/vite/issues/16323) [#&#8203;18242](https://github.com/vitejs/vite/issues/18242)
-   fix(css): dont remove JS chunk for pure CSS chunk when the export is used ([#&#8203;18307](https://github.com/vitejs/vite/issues/18307)) ([889bfc0](https://github.com/vitejs/vite/commit/889bfc0ada6d6cd356bb7a92efdce96298f82fef)), closes [#&#8203;18307](https://github.com/vitejs/vite/issues/18307)
-   fix(deps): bump tsconfck ([#&#8203;18322](https://github.com/vitejs/vite/issues/18322)) ([67783b2](https://github.com/vitejs/vite/commit/67783b2d5513e013bf74844186eb9b2b70d17d5c)), closes [#&#8203;18322](https://github.com/vitejs/vite/issues/18322)
-   fix(deps): update all non-major dependencies ([#&#8203;18292](https://github.com/vitejs/vite/issues/18292)) ([5cac054](https://github.com/vitejs/vite/commit/5cac0544dca2764f0114aac38e9922a0c13d7ef4)), closes [#&#8203;18292](https://github.com/vitejs/vite/issues/18292)
-   fix(hmr): don't try to rewrite imports for direct CSS soft invalidation ([#&#8203;18252](https://github.com/vitejs/vite/issues/18252)) ([a03bb0e](https://github.com/vitejs/vite/commit/a03bb0e2ba35af314c57fc98600bb76566592239)), closes [#&#8203;18252](https://github.com/vitejs/vite/issues/18252)
-   fix(middleware-mode): call all hot.listen when server restart ([#&#8203;18261](https://github.com/vitejs/vite/issues/18261)) ([007773b](https://github.com/vitejs/vite/commit/007773b550e7c6bcaeb8d88970fd6dfe999d5a4a)), closes [#&#8203;18261](https://github.com/vitejs/vite/issues/18261)
-   fix(optimizer): don't externalize transitive dep package name with asset extension ([#&#8203;18152](https://github.com/vitejs/vite/issues/18152)) ([fafc7e2](https://github.com/vitejs/vite/commit/fafc7e28d3395292fbc2f2355417dcc15871ab1e)), closes [#&#8203;18152](https://github.com/vitejs/vite/issues/18152)
-   fix(resolve): fix resolve cache key for external conditions ([#&#8203;18332](https://github.com/vitejs/vite/issues/18332)) ([93d286c](https://github.com/vitejs/vite/commit/93d286c4c1af0b379002a6ff495e82bb87acd65c)), closes [#&#8203;18332](https://github.com/vitejs/vite/issues/18332)
-   fix(resolve): fix resolve cache to consider `conditions` and more ([#&#8203;18302](https://github.com/vitejs/vite/issues/18302)) ([2017a33](https://github.com/vitejs/vite/commit/2017a330f5576dfc9db1538e0b899a1776cd100a)), closes [#&#8203;18302](https://github.com/vitejs/vite/issues/18302)
-   fix(types): add more overload to `defineConfig` ([#&#8203;18299](https://github.com/vitejs/vite/issues/18299)) ([94e34cf](https://github.com/vitejs/vite/commit/94e34cf1dfe6fdb331b6508e830b2cc446000aac)), closes [#&#8203;18299](https://github.com/vitejs/vite/issues/18299)
-   fix: asset import should skip handling data URIs ([#&#8203;18163](https://github.com/vitejs/vite/issues/18163)) ([70813c7](https://github.com/vitejs/vite/commit/70813c7f05fc9a45d102a53514ecac23831e6d6b)), closes [#&#8203;18163](https://github.com/vitejs/vite/issues/18163)
-   fix: cache the runnable environment module runner ([#&#8203;18215](https://github.com/vitejs/vite/issues/18215)) ([95020ab](https://github.com/vitejs/vite/commit/95020ab49e12d143262859e095025cf02423c1d9)), closes [#&#8203;18215](https://github.com/vitejs/vite/issues/18215)
-   fix: call `this.hot.close` for non-ws HotChannel ([#&#8203;18212](https://github.com/vitejs/vite/issues/18212)) ([bad0ccc](https://github.com/vitejs/vite/commit/bad0cccee80c02fa309f274220f6d324d03c3b19)), closes [#&#8203;18212](https://github.com/vitejs/vite/issues/18212)
-   fix: close HotChannel on environment close ([#&#8203;18206](https://github.com/vitejs/vite/issues/18206)) ([2d148e3](https://github.com/vitejs/vite/commit/2d148e347e8fbcc6f0e4e627a20acc81d9ced3e0)), closes [#&#8203;18206](https://github.com/vitejs/vite/issues/18206)
-   fix: require serialization for `HMRConnection.send` on implementation side ([#&#8203;18186](https://github.com/vitejs/vite/issues/18186)) ([9470011](https://github.com/vitejs/vite/commit/9470011570503a917021915c47e6a2f36aae16b5)), closes [#&#8203;18186](https://github.com/vitejs/vite/issues/18186)
-   fix: use `config.consumer` instead of `options?.ssr` / `config.build.ssr` ([#&#8203;18140](https://github.com/vitejs/vite/issues/18140)) ([21ec1ce](https://github.com/vitejs/vite/commit/21ec1ce7f041efa5cd781924f7bc536ab406a197)), closes [#&#8203;18140](https://github.com/vitejs/vite/issues/18140)
-   fix(config): treat all files as ESM on deno ([#&#8203;18081](https://github.com/vitejs/vite/issues/18081)) ([c1ed8a5](https://github.com/vitejs/vite/commit/c1ed8a595a02ec7f8f5a8d23f97b2f21d3834ab1)), closes [#&#8203;18081](https://github.com/vitejs/vite/issues/18081)
-   fix(css): ensure sass compiler initialized only once ([#&#8203;18128](https://github.com/vitejs/vite/issues/18128)) ([4cc5322](https://github.com/vitejs/vite/commit/4cc53224e9b207aa6a5a111e40ed0a0464cf37f4)), closes [#&#8203;18128](https://github.com/vitejs/vite/issues/18128)
-   fix(css): fix lightningcss dep url resolution with custom root ([#&#8203;18125](https://github.com/vitejs/vite/issues/18125)) ([eb08f60](https://github.com/vitejs/vite/commit/eb08f605ddadef99a5d68f55de143e3e47c91618)), closes [#&#8203;18125](https://github.com/vitejs/vite/issues/18125)
-   fix(css): fix missing source file warning with sass modern api custom importer ([#&#8203;18113](https://github.com/vitejs/vite/issues/18113)) ([d7763a5](https://github.com/vitejs/vite/commit/d7763a5615a238cb1b5dceb7bdfc4aac7678fb0a)), closes [#&#8203;18113](https://github.com/vitejs/vite/issues/18113)
-   fix(data-uri): only match ids starting with `data:` ([#&#8203;18241](https://github.com/vitejs/vite/issues/18241)) ([ec0efe8](https://github.com/vitejs/vite/commit/ec0efe8a06d0271ef0154f38fb9beabcd4b1bd89)), closes [#&#8203;18241](https://github.com/vitejs/vite/issues/18241)
-   fix(deps): update all non-major dependencies ([#&#8203;18170](https://github.com/vitejs/vite/issues/18170)) ([c8aea5a](https://github.com/vitejs/vite/commit/c8aea5ae0af90dc6796ef3bdd612d1eb819f157b)), closes [#&#8203;18170](https://github.com/vitejs/vite/issues/18170)
-   fix(deps): upgrade rollup 4.22.4+ to ensure avoiding XSS ([#&#8203;18180](https://github.com/vitejs/vite/issues/18180)) ([ea1d0b9](https://github.com/vitejs/vite/commit/ea1d0b9af9b28b57166d4ca67bece21650221a04)), closes [#&#8203;18180](https://github.com/vitejs/vite/issues/18180)
-   fix(html): make build-html plugin work with `sharedPlugins` ([#&#8203;18214](https://github.com/vitejs/vite/issues/18214)) ([34041b9](https://github.com/vitejs/vite/commit/34041b9d8ea39aa9138d0c2417bfbe39cc9aabdc)), closes [#&#8203;18214](https://github.com/vitejs/vite/issues/18214)
-   fix(mixedModuleGraph): handle undefined id in getModulesByFile ([#&#8203;18201](https://github.com/vitejs/vite/issues/18201)) ([768a50f](https://github.com/vitejs/vite/commit/768a50f7ac668dbf876feef557d8c0f8ff32b8ff)), closes [#&#8203;18201](https://github.com/vitejs/vite/issues/18201)
-   fix(optimizer): re-optimize when changing config `webCompatible` ([#&#8203;18221](https://github.com/vitejs/vite/issues/18221)) ([a44b0a2](https://github.com/vitejs/vite/commit/a44b0a2690812788aaaba00fd3acd2c6fa36669b)), closes [#&#8203;18221](https://github.com/vitejs/vite/issues/18221)
-   fix(ssr): fix source map remapping with multiple sources ([#&#8203;18150](https://github.com/vitejs/vite/issues/18150)) ([e003a2c](https://github.com/vitejs/vite/commit/e003a2ca73b04648e14ebf40f3616838e2da3d6d)), closes [#&#8203;18150](https://github.com/vitejs/vite/issues/18150)
-   fix(vite): refactor "module cache" to "evaluated modules", pass down module to "runInlinedModule" (# ([e83beff](https://github.com/vitejs/vite/commit/e83beff596072f9c7a42f6e2410f154668981d71)), closes [#&#8203;18092](https://github.com/vitejs/vite/issues/18092)
-   fix: avoid DOM Clobbering gadget in `getRelativeUrlFromDocument` ([#&#8203;18115](https://github.com/vitejs/vite/issues/18115)) ([ade1d89](https://github.com/vitejs/vite/commit/ade1d89660e17eedfd35652165b0c26905259fad)), closes [#&#8203;18115](https://github.com/vitejs/vite/issues/18115)
-   fix: fs raw query ([#&#8203;18112](https://github.com/vitejs/vite/issues/18112)) ([9d2413c](https://github.com/vitejs/vite/commit/9d2413c8b64bfb1dfd953340b4e1b5972d5440aa)), closes [#&#8203;18112](https://github.com/vitejs/vite/issues/18112)
-   fix(preload): throw error preloading module as well ([#&#8203;18098](https://github.com/vitejs/vite/issues/18098)) ([ba56cf4](https://github.com/vitejs/vite/commit/ba56cf43b5480f8519349f7d7fe60718e9af5f1a)), closes [#&#8203;18098](https://github.com/vitejs/vite/issues/18098)
-   fix: allow scanning exports from `script module` in svelte ([#&#8203;18063](https://github.com/vitejs/vite/issues/18063)) ([7d699aa](https://github.com/vitejs/vite/commit/7d699aa98155cbf281e3f7f6a8796dcb3b4b0fd6)), closes [#&#8203;18063](https://github.com/vitejs/vite/issues/18063)
-   fix: ensure req.url matches moduleByEtag URL to avoid incorrect 304 ([#&#8203;17997](https://github.com/vitejs/vite/issues/17997)) ([abf04c3](https://github.com/vitejs/vite/commit/abf04c3a84f4d9962a6f9697ca26cd639fa76e87)), closes [#&#8203;17997](https://github.com/vitejs/vite/issues/17997)
-   fix: incorrect environment consumer option resolution ([#&#8203;18079](https://github.com/vitejs/vite/issues/18079)) ([0e3467e](https://github.com/vitejs/vite/commit/0e3467e503aef45119260fe75b399b26f7a80b66)), closes [#&#8203;18079](https://github.com/vitejs/vite/issues/18079)
-   fix: store backwards compatible `ssrModule` and `ssrError` ([#&#8203;18031](https://github.com/vitejs/vite/issues/18031)) ([cf8ced5](https://github.com/vitejs/vite/commit/cf8ced56ea4932e917e2c4ef3d04a87f0ab4f20b)), closes [#&#8203;18031](https://github.com/vitejs/vite/issues/18031)
-   fix(build): declare `preload-helper` has no side effects ([#&#8203;18057](https://github.com/vitejs/vite/issues/18057)) ([587ad7b](https://github.com/vitejs/vite/commit/587ad7b17beba50279eaf46b06c5bf5559c4f36e)), closes [#&#8203;18057](https://github.com/vitejs/vite/issues/18057)
-   fix(css): fallback to mainthread if logger or pkgImporter option is set for sass ([#&#8203;18071](https://github.com/vitejs/vite/issues/18071)) ([d81dc59](https://github.com/vitejs/vite/commit/d81dc59473b1053bf48c45a9d45f87ee6ecf2c02)), closes [#&#8203;18071](https://github.com/vitejs/vite/issues/18071)
-   fix(dynamicImportVars): correct glob pattern for paths with parentheses ([#&#8203;17940](https://github.com/vitejs/vite/issues/17940)) ([2a391a7](https://github.com/vitejs/vite/commit/2a391a7df6e5b4a8d9e8313fba7ddf003df41e12)), closes [#&#8203;17940](https://github.com/vitejs/vite/issues/17940)
-   fix(html): escape html attribute ([#&#8203;18067](https://github.com/vitejs/vite/issues/18067)) ([5983f36](https://github.com/vitejs/vite/commit/5983f366d499f74d473097154bbbcc8e51476dc4)), closes [#&#8203;18067](https://github.com/vitejs/vite/issues/18067)
-   fix(preload): allow ignoring dep errors ([#&#8203;18046](https://github.com/vitejs/vite/issues/18046)) ([3fb2889](https://github.com/vitejs/vite/commit/3fb28896d916e03cef1b5bd6877ac184c7ec8003)), closes [#&#8203;18046](https://github.com/vitejs/vite/issues/18046)

##### Chore

-   chore: add 5.4.x changelogs ([#&#8203;18768](https://github.com/vitejs/vite/issues/18768)) ([26b58c8](https://github.com/vitejs/vite/commit/26b58c8130f232dcd4e839a337bbe478352f23ab)), closes [#&#8203;18768](https://github.com/vitejs/vite/issues/18768)
-   chore: add some comments about mimes ([#&#8203;18705](https://github.com/vitejs/vite/issues/18705)) ([f07e9b9](https://github.com/vitejs/vite/commit/f07e9b9d01d790c727edc2497304f07b1ef5d28f)), closes [#&#8203;18705](https://github.com/vitejs/vite/issues/18705)
-   chore(deps): update all non-major dependencies ([#&#8203;18746](https://github.com/vitejs/vite/issues/18746)) ([0ad16e9](https://github.com/vitejs/vite/commit/0ad16e92d57453d9e5392c90fd06bda947be9de6)), closes [#&#8203;18746](https://github.com/vitejs/vite/issues/18746)
-   docs: rename `HotUpdateContext` to `HotUpdateOptions` ([#&#8203;18718](https://github.com/vitejs/vite/issues/18718)) ([824c347](https://github.com/vitejs/vite/commit/824c347fa21aaf5bbf811994385b790db4287ab0)), closes [#&#8203;18718](https://gith…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants