From abdc84c40e3e504202ea105477ccb91c232059b8 Mon Sep 17 00:00:00 2001 From: ocavue Date: Wed, 7 Jan 2026 22:33:43 +1100 Subject: [PATCH] fix: process style modules at the end during HMR --- .../src/plugins/hot-update.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/vite-plugin-svelte/src/plugins/hot-update.js b/packages/vite-plugin-svelte/src/plugins/hot-update.js index b264009a3..5bd242269 100644 --- a/packages/vite-plugin-svelte/src/plugins/hot-update.js +++ b/packages/vite-plugin-svelte/src/plugins/hot-update.js @@ -81,16 +81,29 @@ export function hotUpdate(api) { const svelteRequest = idParser(ctx.file, false, ctx.timestamp); if (svelteRequest) { const { modules } = ctx; - const svelteModules = []; + const svelteJsModules = []; + const svelteCssModules = []; const nonSvelteModules = []; for (const mod of modules) { if (transformResultCache.has(mod.id)) { - svelteModules.push(mod); + if (mod.id && SVELTE_VIRTUAL_STYLE_ID_REGEX.test(mod.id)) { + svelteCssModules.push(mod); + } else { + svelteJsModules.push(mod); + } } else { nonSvelteModules.push(mod); } } + // Always process Svelte components first, then styles. This + // ensures that when we call + // `this.environment.transformRequest(mod.url)` later for + // style modules in this function, the Svelte components + // have already been processed and the cached styles are up + // to date. + const svelteModules = [...svelteJsModules, ...svelteCssModules]; + if (svelteModules.length === 0) { return; // nothing to do for us }