@@ -219,28 +219,36 @@ function buildOptimizeDepsForSvelte(
219
219
// include svelte imports for optimization unless explicitly excluded
220
220
const include : string [ ] = [ ] ;
221
221
const exclude : string [ ] = [ 'svelte-hmr' ] ;
222
- const isSvelteExcluded = optimizeDeps ?. exclude ?. includes ( 'svelte' ) ;
223
- if ( ! isSvelteExcluded ) {
222
+ const isIncluded = ( dep : string ) => include . includes ( dep ) || optimizeDeps ?. include ?. includes ( dep ) ;
223
+ const isExcluded = ( dep : string ) => {
224
+ return (
225
+ exclude . includes ( dep ) ||
226
+ // vite optimizeDeps.exclude works for subpackages too
227
+ // see https://github.com/vitejs/vite/blob/c87763c1418d1ba876eae13d139eba83ac6f28b2/packages/vite/src/node/optimizer/scan.ts#L293
228
+ optimizeDeps ?. exclude ?. some ( ( id ) => dep === id || id . startsWith ( `${ dep } /` ) )
229
+ ) ;
230
+ } ;
231
+ if ( ! isExcluded ( 'svelte' ) ) {
224
232
const svelteImportsToInclude = SVELTE_IMPORTS . filter ( ( x ) => x !== 'svelte/ssr' ) ; // not used on clientside
225
233
log . debug (
226
234
`adding bare svelte packages to optimizeDeps.include: ${ svelteImportsToInclude . join ( ', ' ) } `
227
235
) ;
228
- include . push ( ...svelteImportsToInclude . filter ( ( x ) => ! optimizeDeps ?. include ?. includes ( x ) ) ) ;
236
+ include . push ( ...svelteImportsToInclude . filter ( ( x ) => ! isIncluded ( x ) ) ) ;
229
237
} else {
230
238
log . debug ( '"svelte" is excluded in optimizeDeps.exclude, skipped adding it to include.' ) ;
231
239
}
232
240
233
241
const svelteDepsToExclude = Array . from ( new Set ( svelteDeps . map ( ( dep ) => dep . name ) ) ) . filter (
234
- ( dep ) => ! optimizeDeps ?. include ?. includes ( dep )
242
+ ( dep ) => ! isIncluded ( dep )
235
243
) ;
236
244
log . debug ( `automatically excluding found svelte dependencies: ${ svelteDepsToExclude . join ( ', ' ) } ` ) ;
237
- exclude . push ( ...svelteDepsToExclude . filter ( ( x ) => ! optimizeDeps ?. exclude ?. includes ( x ) ) ) ;
245
+ exclude . push ( ...svelteDepsToExclude . filter ( ( x ) => ! isExcluded ( x ) ) ) ;
238
246
239
247
const transitiveDepsToInclude = svelteDeps
240
- . filter ( ( dep ) => svelteDepsToExclude . includes ( dep . name ) )
248
+ . filter ( ( dep ) => isExcluded ( dep . name ) )
241
249
. flatMap ( ( dep ) =>
242
250
Object . keys ( dep . pkg . dependencies || { } )
243
- . filter ( ( depOfDep ) => ! svelteDepsToExclude . includes ( depOfDep ) )
251
+ . filter ( ( depOfDep ) => ! isExcluded ( depOfDep ) )
244
252
. map ( ( depOfDep ) => dep . path . concat ( dep . name , depOfDep ) . join ( ' > ' ) )
245
253
) ;
246
254
log . debug (
0 commit comments