Skip to content

Commit 0c1a7f6

Browse files
authored
fix: optimize "svelte > clsx" by default (#1124)
* fix: optimize svelte > clsx by default * chore: add comment to explain use of runtime deps
1 parent 6e338f4 commit 0c1a7f6

File tree

5 files changed

+20
-5
lines changed

5 files changed

+20
-5
lines changed

.changeset/fine-nights-mix.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': patch
3+
---
4+
5+
add `svelte > clsx` to optimizeDeps.include to avoid page reload when using vite6 and npm

packages/e2e-tests/kit-node/__tests__/kit.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ describe('kit-node', () => {
318318
'svelte/store',
319319
'svelte/transition',
320320
'svelte',
321+
'svelte > clsx',
321322
'svelte/internal/disclose-version',
322323
'svelte/internal/flags/legacy',
323324
'svelte/internal/flags/tracing',

packages/e2e-tests/prebundle-svelte-deps/__tests__/prebundle-svelte-deps.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ if (!isBuild) {
3333
expect(optimizedPaths).toContain('e2e-test-dep-svelte-api-only');
3434
expect(optimizedPaths).toContain('e2e-test-dep-svelte-nested');
3535
expect(optimizedPaths).toContain('e2e-test-dep-svelte-module');
36+
expect(optimizedPaths).toContain('svelte');
37+
expect(optimizedPaths).toContain('svelte > clsx');
3638
});
3739

3840
test('should not optimize excluded svelte dependencies', () => {

packages/vite-plugin-svelte/src/utils/constants.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import { createRequire } from 'node:module';
22

3-
export const SVELTE_IMPORTS = Object.entries(
4-
createRequire(import.meta.url)('svelte/package.json').exports
5-
)
3+
const sveltePkg = createRequire(import.meta.url)('svelte/package.json');
4+
5+
// list of svelte runtime dependencies to optimize together with svelte itself
6+
export const SVELTE_RUNTIME_DEPENDENCIES = [
7+
'clsx' // avoids dev server restart after page load with npm + vite6 (see #1067)
8+
].filter((dep) => !!sveltePkg.dependencies?.[dep]);
9+
10+
export const SVELTE_IMPORTS = Object.entries(sveltePkg.exports)
611
.map(([name, config]) => {
712
// ignore type only
813
if (typeof config === 'object' && Object.keys(config).length === 1 && config.types) {

packages/vite-plugin-svelte/src/utils/options.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import {
1212
DEFAULT_SVELTE_EXT,
1313
FAQ_LINK_MISSING_EXPORTS_CONDITION,
1414
SVELTE_EXPORT_CONDITIONS,
15-
SVELTE_IMPORTS
15+
SVELTE_IMPORTS,
16+
SVELTE_RUNTIME_DEPENDENCIES
1617
} from './constants.js';
1718

1819
import path from 'node:path';
@@ -550,8 +551,9 @@ function buildExtraConfigForSvelte(config) {
550551
const svelteImportsToInclude = SVELTE_IMPORTS.filter(
551552
(si) => !(si.endsWith('/server') || si.includes('/server/'))
552553
);
554+
svelteImportsToInclude.push(...SVELTE_RUNTIME_DEPENDENCIES.map((dep) => `svelte > ${dep}`));
553555
log.debug(
554-
`adding bare svelte packages to optimizeDeps.include: ${svelteImportsToInclude.join(', ')} `,
556+
`adding bare svelte packages and runtime dependencies to optimizeDeps.include: ${svelteImportsToInclude.join(', ')} `,
555557
undefined,
556558
'config'
557559
);

0 commit comments

Comments
 (0)