Skip to content

Commit 1be46f1

Browse files
authored
feat: reduce number of js updates when editing component css (#26)
* feat: reduce number of js updates when editing component css * add changeset
1 parent 9139207 commit 1be46f1

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

.changeset/flat-books-kick.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/vite-plugin-svelte': minor
3+
---
4+
5+
improved css hmr

packages/vite-plugin-svelte/src/utils/preprocess.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,22 @@ export function createVitePreprocessorGroup(
5858
} as PreprocessorGroup;
5959
}
6060

61+
/**
62+
* this appends a *{} rule to component styles to force the svelte compiler to add style classes to all nodes
63+
* That means adding/removing class rules from <style> node won't trigger js updates as the scope classes are not changed
64+
*
65+
* only used during dev with enabled css hmr
66+
*/
67+
function createInjectScopeEverythingRulePreprocessorGroup(): PreprocessorGroup {
68+
return {
69+
style({ content }) {
70+
return {
71+
code: `${content} *{}`
72+
};
73+
}
74+
};
75+
}
76+
6177
export function buildExtraPreprocessors(options: ResolvedOptions, config: ResolvedConfig) {
6278
const extraPreprocessors = [];
6379
if (options.useVitePreprocess) {
@@ -77,5 +93,9 @@ export function buildExtraPreprocessors(options: ResolvedOptions, config: Resolv
7793
);
7894
}
7995

96+
if (options.hot && !options.disableCssHmr) {
97+
extraPreprocessors.push(createInjectScopeEverythingRulePreprocessorGroup());
98+
}
99+
80100
return extraPreprocessors;
81101
}

0 commit comments

Comments
 (0)