Skip to content

Commit ab2dd12

Browse files
authored
feat(config): dynamically generate list of svelte exports (#941)
* feat(config): dynamically generate list of svelte exports * fix(optimizeDeps): don't optimize server-only exports of svelte
1 parent e9f048c commit ab2dd12

File tree

5 files changed

+36
-16
lines changed

5 files changed

+36
-16
lines changed

.changeset/lemon-trains-hear.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/vite-plugin-svelte': minor
3+
---
4+
5+
feat(config): dynamically extract list of svelte exports from peer dependency so that new exports work automatically"

.changeset/old-ants-remain.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/vite-plugin-svelte': patch
3+
---
4+
5+
fix(optimizeDeps): avoid to optimise server only entrypoints of svelte that are never used on the client

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

+6-2
Original file line numberDiff line numberDiff line change
@@ -300,14 +300,15 @@ describe('kit-node', () => {
300300
'e2e-test-dep-svelte-api-only',
301301
'svelte/animate',
302302
'svelte/easing',
303+
'svelte/events',
303304
'svelte/internal',
305+
'svelte/internal/client',
304306
'svelte/motion',
307+
'svelte/reactivity',
305308
'svelte/store',
306309
'svelte/transition',
307310
'svelte',
308311
'svelte/internal/disclose-version',
309-
'svelte/internal/server',
310-
'svelte/server',
311312
'svelte/legacy',
312313
'svelte-i18n > deepmerge',
313314
'svelte-i18n > cli-color',
@@ -326,8 +327,11 @@ describe('kit-node', () => {
326327
const expectedDedupe = [
327328
'svelte/animate',
328329
'svelte/easing',
330+
'svelte/events',
329331
'svelte/internal',
332+
'svelte/internal/client',
330333
'svelte/motion',
334+
'svelte/reactivity',
331335
'svelte/store',
332336
'svelte/transition',
333337
'svelte',

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

+17-13
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
1+
import { createRequire } from 'node:module';
2+
13
export const VITE_RESOLVE_MAIN_FIELDS = ['browser', 'module', 'jsnext:main', 'jsnext'];
24

35
export const SVELTE_RESOLVE_MAIN_FIELDS = ['svelte'];
46

5-
export const SVELTE_IMPORTS = [
6-
'svelte/animate',
7-
'svelte/easing',
8-
'svelte/internal',
9-
'svelte/internal/disclose-version',
10-
'svelte/motion',
11-
'svelte/store',
12-
'svelte/transition',
13-
'svelte/server',
14-
'svelte/internal/server',
15-
'svelte/legacy',
16-
'svelte'
17-
];
7+
export const SVELTE_IMPORTS = Object.entries(
8+
createRequire(import.meta.url)('svelte/package.json').exports
9+
)
10+
.map(([name, config]) => {
11+
// ignore type only
12+
if (typeof config === 'object' && Object.keys(config).length === 1 && config.types) {
13+
return '';
14+
}
15+
// ignore names
16+
if (name === './package.json' || name === './compiler') {
17+
return '';
18+
}
19+
return name.replace(/^\./, 'svelte');
20+
})
21+
.filter((s) => s.length > 0);
1822

1923
export const SVELTE_EXPORT_CONDITIONS = ['svelte'];
2024

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,9 @@ function buildExtraConfigForSvelte(config) {
553553
/** @type {string[]} */
554554
const exclude = [];
555555
if (!isDepExcluded('svelte', config.optimizeDeps?.exclude ?? [])) {
556-
const svelteImportsToInclude = SVELTE_IMPORTS;
556+
const svelteImportsToInclude = SVELTE_IMPORTS.filter(
557+
(si) => !(si.endsWith('/server') || si.includes('/server/'))
558+
);
557559
log.debug(
558560
`adding bare svelte packages to optimizeDeps.include: ${svelteImportsToInclude.join(', ')} `,
559561
undefined,

0 commit comments

Comments
 (0)