Skip to content

Commit 0141699

Browse files
authored
fix: don't reinclude excluded dependencies in automatic handling (#159)
* wip: take existing include and exclude config into account when filtering in automatic dependency optimization * fix: don't reinclude excluded dependencies in automatic handling
1 parent 4b6aab3 commit 0141699

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

.changeset/strange-brooms-crash.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+
Improve automatic dependency pre-bundling by not reincluding dependencies that are already present in optimizeDeps.exclude

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)