@@ -219,28 +219,36 @@ function buildOptimizeDepsForSvelte(
219219 // include svelte imports for optimization unless explicitly excluded
220220 const include : string [ ] = [ ] ;
221221 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' ) ) {
224232 const svelteImportsToInclude = SVELTE_IMPORTS . filter ( ( x ) => x !== 'svelte/ssr' ) ; // not used on clientside
225233 log . debug (
226234 `adding bare svelte packages to optimizeDeps.include: ${ svelteImportsToInclude . join ( ', ' ) } `
227235 ) ;
228- include . push ( ...svelteImportsToInclude . filter ( ( x ) => ! optimizeDeps ?. include ?. includes ( x ) ) ) ;
236+ include . push ( ...svelteImportsToInclude . filter ( ( x ) => ! isIncluded ( x ) ) ) ;
229237 } else {
230238 log . debug ( '"svelte" is excluded in optimizeDeps.exclude, skipped adding it to include.' ) ;
231239 }
232240
233241 const svelteDepsToExclude = Array . from ( new Set ( svelteDeps . map ( ( dep ) => dep . name ) ) ) . filter (
234- ( dep ) => ! optimizeDeps ?. include ?. includes ( dep )
242+ ( dep ) => ! isIncluded ( dep )
235243 ) ;
236244 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 ) ) ) ;
238246
239247 const transitiveDepsToInclude = svelteDeps
240- . filter ( ( dep ) => svelteDepsToExclude . includes ( dep . name ) )
248+ . filter ( ( dep ) => isExcluded ( dep . name ) )
241249 . flatMap ( ( dep ) =>
242250 Object . keys ( dep . pkg . dependencies || { } )
243- . filter ( ( depOfDep ) => ! svelteDepsToExclude . includes ( depOfDep ) )
251+ . filter ( ( depOfDep ) => ! isExcluded ( depOfDep ) )
244252 . map ( ( depOfDep ) => dep . path . concat ( dep . name , depOfDep ) . join ( ' > ' ) )
245253 ) ;
246254 log . debug (
0 commit comments