diff --git a/.changeset/chatty-lemons-yell.md b/.changeset/chatty-lemons-yell.md
new file mode 100644
index 000000000..12206e6db
--- /dev/null
+++ b/.changeset/chatty-lemons-yell.md
@@ -0,0 +1,7 @@
+---
+'@sveltejs/vite-plugin-svelte': major
+---
+
+Enable optimization for nested dependencies of excluded svelte dependencies
+
+Vite 2.5.3 and above is needed to support this feature.
diff --git a/package.json b/package.json
index 10f2fd9f5..bf7983cc7 100644
--- a/package.json
+++ b/package.json
@@ -65,7 +65,7 @@
     "svelte": "^3.42.4",
     "ts-jest": "^27.0.5",
     "typescript": "^4.4.2",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   },
   "lint-staged": {
     "*.{js,ts,svelte,html,md,svx}": "eslint --fix",
diff --git a/packages/e2e-tests/_test_dependencies/README.md b/packages/e2e-tests/_test_dependencies/README.md
new file mode 100644
index 000000000..a47ff782e
--- /dev/null
+++ b/packages/e2e-tests/_test_dependencies/README.md
@@ -0,0 +1 @@
+This directory contains packages that are used as dependencies in various e2e tests
diff --git a/packages/e2e-tests/_test_dependencies/cjs-and-esm/index.cjs b/packages/e2e-tests/_test_dependencies/cjs-and-esm/index.cjs
new file mode 100644
index 000000000..ae85bf94c
--- /dev/null
+++ b/packages/e2e-tests/_test_dependencies/cjs-and-esm/index.cjs
@@ -0,0 +1,3 @@
+module.exports = {
+	cjs_and_esm: () => 'cjs'
+}
diff --git a/packages/e2e-tests/_test_dependencies/cjs-and-esm/index.mjs b/packages/e2e-tests/_test_dependencies/cjs-and-esm/index.mjs
new file mode 100644
index 000000000..d6e98b33e
--- /dev/null
+++ b/packages/e2e-tests/_test_dependencies/cjs-and-esm/index.mjs
@@ -0,0 +1 @@
+export function cjs_and_esm() { return 'esm' };
diff --git a/packages/e2e-tests/_test_dependencies/cjs-and-esm/package.json b/packages/e2e-tests/_test_dependencies/cjs-and-esm/package.json
new file mode 100644
index 000000000..5c82f3371
--- /dev/null
+++ b/packages/e2e-tests/_test_dependencies/cjs-and-esm/package.json
@@ -0,0 +1,19 @@
+{
+  "version": "1.0.0",
+  "private": true,
+  "name": "e2e-test-dep-cjs-and-esm",
+  "main": "index.cjs",
+  "module": "index.mjs",
+  "files": [
+    "package.json",
+    "index.mjs",
+    "index.cjs"
+  ],
+  "exports":{
+    ".": {
+      "import": "./index.mjs",
+      "require": "./index.cjs"
+    },
+    "./package.json": "./package.json"
+  }
+}
diff --git a/packages/e2e-tests/_test_dependencies/cjs-only/index.js b/packages/e2e-tests/_test_dependencies/cjs-only/index.js
new file mode 100644
index 000000000..41cb0f071
--- /dev/null
+++ b/packages/e2e-tests/_test_dependencies/cjs-only/index.js
@@ -0,0 +1,3 @@
+module.exports = {
+	cjs: () => 'cjs'
+};
diff --git a/packages/e2e-tests/_test_dependencies/cjs-only/package.json b/packages/e2e-tests/_test_dependencies/cjs-only/package.json
new file mode 100644
index 000000000..7ee2b0d9e
--- /dev/null
+++ b/packages/e2e-tests/_test_dependencies/cjs-only/package.json
@@ -0,0 +1,11 @@
+{
+  "version": "1.0.0",
+  "private": true,
+  "name": "e2e-test-dep-cjs-only",
+  "main": "index.js",
+  "files": [
+    "package.json",
+    "index.js"
+  ],
+  "type": "commonjs"
+}
diff --git a/packages/e2e-tests/_test_dependencies/esm-only/index.js b/packages/e2e-tests/_test_dependencies/esm-only/index.js
new file mode 100644
index 000000000..017363681
--- /dev/null
+++ b/packages/e2e-tests/_test_dependencies/esm-only/index.js
@@ -0,0 +1,3 @@
+export function esm() {
+	return 'esm';
+}
diff --git a/packages/e2e-tests/_test_dependencies/esm-only/package.json b/packages/e2e-tests/_test_dependencies/esm-only/package.json
new file mode 100644
index 000000000..c3f404496
--- /dev/null
+++ b/packages/e2e-tests/_test_dependencies/esm-only/package.json
@@ -0,0 +1,18 @@
+{
+  "version": "1.0.0",
+  "private": true,
+  "name": "e2e-test-dep-esm-only",
+  "main": "index.js",
+  "module": "index.js",
+  "files": [
+    "package.json",
+    "index.cjs"
+  ],
+  "exports":{
+    ".": {
+      "import": "./index.js"
+    },
+    "./package.json": "./package.json"
+  },
+  "type": "module"
+}
diff --git a/packages/e2e-tests/_test_dependencies/svelte-nested/package.json b/packages/e2e-tests/_test_dependencies/svelte-nested/package.json
new file mode 100644
index 000000000..1538b2d4b
--- /dev/null
+++ b/packages/e2e-tests/_test_dependencies/svelte-nested/package.json
@@ -0,0 +1,18 @@
+{
+  "version": "1.0.0",
+  "private": true,
+  "name": "e2e-test-dep-svelte-nested",
+  "svelte": "src/index.js",
+  "main": "src/index.js",
+  "files": [
+    "src",
+    "package.json"
+  ],
+  "exports": {
+    "./package.json": "./package.json"
+  },
+  "dependencies": {
+    "e2e-test-dep-svelte-simple": "workspace:*",
+    "e2e-test-dep-cjs-and-esm": "workspace:*"
+  }
+}
diff --git a/packages/e2e-tests/_test_dependencies/svelte-nested/src/components/Message.svelte b/packages/e2e-tests/_test_dependencies/svelte-nested/src/components/Message.svelte
new file mode 100644
index 000000000..b5f79014c
--- /dev/null
+++ b/packages/e2e-tests/_test_dependencies/svelte-nested/src/components/Message.svelte
@@ -0,0 +1,8 @@
+<script>
+	export let id = 'id';
+	export let message = '';
+	import { cjs_and_esm } from 'e2e-test-dep-cjs-and-esm';
+</script>
+
+<div {id}>{message}</div>
+<div id="cjs-and-esm">{cjs_and_esm()}</div>
diff --git a/packages/e2e-tests/_test_dependencies/svelte-nested/src/index.js b/packages/e2e-tests/_test_dependencies/svelte-nested/src/index.js
new file mode 100644
index 000000000..15a396fe5
--- /dev/null
+++ b/packages/e2e-tests/_test_dependencies/svelte-nested/src/index.js
@@ -0,0 +1,2 @@
+import Message from './components/Message.svelte';
+export { Message };
diff --git a/packages/e2e-tests/hmr-test-dependency/index.js b/packages/e2e-tests/_test_dependencies/svelte-simple/index.js
similarity index 100%
rename from packages/e2e-tests/hmr-test-dependency/index.js
rename to packages/e2e-tests/_test_dependencies/svelte-simple/index.js
diff --git a/packages/e2e-tests/_test_dependencies/svelte-simple/package.json b/packages/e2e-tests/_test_dependencies/svelte-simple/package.json
new file mode 100644
index 000000000..3116ab0c5
--- /dev/null
+++ b/packages/e2e-tests/_test_dependencies/svelte-simple/package.json
@@ -0,0 +1,10 @@
+{
+  "version": "1.0.0",
+  "private": true,
+  "name": "e2e-test-dep-svelte-simple",
+  "main": "index.js",
+  "svelte": "index.js",
+  "dependencies": {
+    "e2e-test-dep-cjs-only": "workspace:*"
+  }
+}
diff --git a/packages/e2e-tests/hmr-test-dependency/src/components/Dependency.svelte b/packages/e2e-tests/_test_dependencies/svelte-simple/src/components/Dependency.svelte
similarity index 68%
rename from packages/e2e-tests/hmr-test-dependency/src/components/Dependency.svelte
rename to packages/e2e-tests/_test_dependencies/svelte-simple/src/components/Dependency.svelte
index 5cbbb78e9..812a159e3 100644
--- a/packages/e2e-tests/hmr-test-dependency/src/components/Dependency.svelte
+++ b/packages/e2e-tests/_test_dependencies/svelte-simple/src/components/Dependency.svelte
@@ -1,9 +1,12 @@
 <script>
 	const label = 'dependency-import';
+	import * as cjsOnly from 'e2e-test-dep-cjs-only';
+	const { cjs } = cjsOnly;
 </script>
 
 <div id="dependency-import"><span class="label">{label}</span></div>
 <div id="sticky-dep" class="sticky-dep">sticky-dep</div>
+<div id="cjs-only-dependency">{cjs()}</div>
 
 <style>
 	.label {
diff --git a/packages/e2e-tests/autoprefixer-browerslist/package.json b/packages/e2e-tests/autoprefixer-browerslist/package.json
index 2a89b473f..601b6ea9b 100644
--- a/packages/e2e-tests/autoprefixer-browerslist/package.json
+++ b/packages/e2e-tests/autoprefixer-browerslist/package.json
@@ -8,7 +8,7 @@
     "preview": "vite preview"
   },
   "dependencies": {
-    "e2e-tests-hmr-test-dependency": "workspace:*"
+    "e2e-test-dep-svelte-simple": "workspace:*"
   },
   "devDependencies": {
     "@sveltejs/vite-plugin-svelte": "workspace:*",
@@ -17,6 +17,6 @@
     "postcss-load-config": "^3.1.0",
     "svelte": "^3.42.4",
     "svelte-preprocess": "^4.8.0",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   }
 }
diff --git a/packages/e2e-tests/autoprefixer-browerslist/src/App.svelte b/packages/e2e-tests/autoprefixer-browerslist/src/App.svelte
index 87194dbb5..e5b4f62b2 100644
--- a/packages/e2e-tests/autoprefixer-browerslist/src/App.svelte
+++ b/packages/e2e-tests/autoprefixer-browerslist/src/App.svelte
@@ -1,5 +1,5 @@
 <script>
-	import Dependency from 'e2e-tests-hmr-test-dependency';
+	import Dependency from 'e2e-test-dep-svelte-simple';
 </script>
 
 <div class="sticky" id="#sticky">sticky-div</div>
diff --git a/packages/e2e-tests/autoprefixer-browerslist/vite.config.js b/packages/e2e-tests/autoprefixer-browerslist/vite.config.js
index f8d6d1b5c..ddc3d3a4e 100644
--- a/packages/e2e-tests/autoprefixer-browerslist/vite.config.js
+++ b/packages/e2e-tests/autoprefixer-browerslist/vite.config.js
@@ -7,7 +7,12 @@ module.exports = defineConfig(() => {
 		build: {
 			// make build faster by skipping transforms and minification
 			target: 'esnext',
-			minify: false
+			minify: false,
+			commonjsOptions: {
+				// pnpm only symlinks packages, and vite wont process cjs deps not in
+				// node_modules, so we add the cjs dep here
+				include: [/node_modules/, /cjs-only/]
+			}
 		},
 		server: {
 			watch: {
diff --git a/packages/e2e-tests/configfile-custom/package.json b/packages/e2e-tests/configfile-custom/package.json
index 3306e277c..4ac77c4b0 100644
--- a/packages/e2e-tests/configfile-custom/package.json
+++ b/packages/e2e-tests/configfile-custom/package.json
@@ -8,11 +8,11 @@
     "preview": "vite preview"
   },
   "dependencies": {
-    "e2e-tests-hmr-test-dependency": "workspace:*"
+    "e2e-test-dep-svelte-simple": "workspace:*"
   },
   "devDependencies": {
     "@sveltejs/vite-plugin-svelte": "workspace:*",
     "svelte": "^3.42.4",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   }
 }
diff --git a/packages/e2e-tests/configfile-custom/src/App.svelte b/packages/e2e-tests/configfile-custom/src/App.svelte
index 761bc15e7..2a0453eda 100644
--- a/packages/e2e-tests/configfile-custom/src/App.svelte
+++ b/packages/e2e-tests/configfile-custom/src/App.svelte
@@ -1,5 +1,5 @@
 <script>
-	import Dependency from 'e2e-tests-hmr-test-dependency';
+	import Dependency from 'e2e-test-dep-svelte-simple';
 	import Child from './lib/Child.svelte';
 </script>
 
diff --git a/packages/e2e-tests/configfile-custom/vite.config.js b/packages/e2e-tests/configfile-custom/vite.config.js
index af0e5ac20..b393eb3ee 100644
--- a/packages/e2e-tests/configfile-custom/vite.config.js
+++ b/packages/e2e-tests/configfile-custom/vite.config.js
@@ -8,7 +8,12 @@ module.exports = defineConfig(() => {
 		build: {
 			// make build faster by skipping transforms and minification
 			target: 'esnext',
-			minify: false
+			minify: false,
+			commonjsOptions: {
+				// pnpm only symlinks packages, and vite wont process cjs deps not in
+				// node_modules, so we add the cjs dep here
+				include: [/node_modules/, /cjs-only/]
+			}
 		},
 		server: {
 			watch: {
diff --git a/packages/e2e-tests/configfile-esm/package.json b/packages/e2e-tests/configfile-esm/package.json
index 398e44f65..f478359c5 100644
--- a/packages/e2e-tests/configfile-esm/package.json
+++ b/packages/e2e-tests/configfile-esm/package.json
@@ -8,13 +8,13 @@
     "preview": "vite preview"
   },
   "dependencies": {
-    "e2e-tests-hmr-test-dependency": "workspace:*"
+    "e2e-test-dep-svelte-simple": "workspace:*"
   },
   "devDependencies": {
     "@sveltejs/vite-plugin-svelte": "workspace:*",
     "svelte": "^3.42.4",
     "svelte-preprocess": "^4.8.0",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   },
   "type": "module"
 }
diff --git a/packages/e2e-tests/configfile-esm/src/App.svelte b/packages/e2e-tests/configfile-esm/src/App.svelte
index 761bc15e7..2a0453eda 100644
--- a/packages/e2e-tests/configfile-esm/src/App.svelte
+++ b/packages/e2e-tests/configfile-esm/src/App.svelte
@@ -1,5 +1,5 @@
 <script>
-	import Dependency from 'e2e-tests-hmr-test-dependency';
+	import Dependency from 'e2e-test-dep-svelte-simple';
 	import Child from './lib/Child.svelte';
 </script>
 
diff --git a/packages/e2e-tests/configfile-esm/vite.config.js b/packages/e2e-tests/configfile-esm/vite.config.js
index 8fc785c12..28f6bbca5 100644
--- a/packages/e2e-tests/configfile-esm/vite.config.js
+++ b/packages/e2e-tests/configfile-esm/vite.config.js
@@ -8,7 +8,12 @@ export default defineConfig(({ command, mode }) => {
 		build: {
 			// make build faster by skipping transforms and minification
 			target: 'esnext',
-			minify: false
+			minify: false,
+			commonjsOptions: {
+				// pnpm only symlinks packages, and vite wont process cjs deps not in
+				// node_modules, so we add the cjs dep here
+				include: [/node_modules/, /cjs-only/]
+			}
 		},
 		server: {
 			watch: {
diff --git a/packages/e2e-tests/custom-extensions/package.json b/packages/e2e-tests/custom-extensions/package.json
index 7e2bd4336..209ae0720 100644
--- a/packages/e2e-tests/custom-extensions/package.json
+++ b/packages/e2e-tests/custom-extensions/package.json
@@ -10,6 +10,6 @@
   "devDependencies": {
     "@sveltejs/vite-plugin-svelte": "workspace:*",
     "svelte": "^3.42.4",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   }
 }
diff --git a/packages/e2e-tests/hmr-test-dependency/package.json b/packages/e2e-tests/hmr-test-dependency/package.json
deleted file mode 100644
index 249376295..000000000
--- a/packages/e2e-tests/hmr-test-dependency/package.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "version": "1.0.0",
-  "private": true,
-  "name": "e2e-tests-hmr-test-dependency",
-  "main": "index.js",
-  "svelte": "index.js"
-}
diff --git a/packages/e2e-tests/hmr/package.json b/packages/e2e-tests/hmr/package.json
index 8112e19f3..8ade6c0a0 100644
--- a/packages/e2e-tests/hmr/package.json
+++ b/packages/e2e-tests/hmr/package.json
@@ -8,12 +8,12 @@
     "preview": "vite preview"
   },
   "dependencies": {
-    "e2e-tests-hmr-test-dependency": "workspace:*"
+    "e2e-test-dep-svelte-simple": "workspace:*"
   },
   "devDependencies": {
     "@sveltejs/vite-plugin-svelte": "workspace:*",
     "node-fetch": "^2.6.1",
     "svelte": "^3.42.4",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   }
 }
diff --git a/packages/e2e-tests/hmr/src/App.svelte b/packages/e2e-tests/hmr/src/App.svelte
index 24b83bb32..5f7a4b9d4 100644
--- a/packages/e2e-tests/hmr/src/App.svelte
+++ b/packages/e2e-tests/hmr/src/App.svelte
@@ -1,6 +1,6 @@
 <script>
 	import StaticImport from './components/StaticImport.svelte';
-	import Dependency from 'e2e-tests-hmr-test-dependency';
+	import Dependency from 'e2e-test-dep-svelte-simple';
 	import HmrTest from './components/HmrTest.svelte';
 	let dynamicImportComponent;
 	function importDynamic() {
diff --git a/packages/e2e-tests/hmr/vite.config.js b/packages/e2e-tests/hmr/vite.config.js
index 41d0c40e1..c5708a92a 100644
--- a/packages/e2e-tests/hmr/vite.config.js
+++ b/packages/e2e-tests/hmr/vite.config.js
@@ -3,13 +3,15 @@ const { svelte } = require('@sveltejs/vite-plugin-svelte');
 
 module.exports = defineConfig(({ command, mode }) => {
 	return {
-		optimizeDeps: {
-			exclude: ['e2e-tests-hmr-test-dependency']
-		},
 		plugins: [svelte()],
 		build: {
 			minify: false,
-			target: 'esnext'
+			target: 'esnext',
+			commonjsOptions: {
+				// pnpm only symlinks packages, and vite wont process cjs deps not in
+				// node_modules, so we add the cjs dep here
+				include: [/node_modules/, /cjs-only/]
+			}
 		},
 		server: {
 			watch: {
diff --git a/packages/e2e-tests/package-json-svelte-field/__tests__/package-json-svelte-field.spec.ts b/packages/e2e-tests/package-json-svelte-field/__tests__/package-json-svelte-field.spec.ts
index 0b3942664..657158e88 100644
--- a/packages/e2e-tests/package-json-svelte-field/__tests__/package-json-svelte-field.spec.ts
+++ b/packages/e2e-tests/package-json-svelte-field/__tests__/package-json-svelte-field.spec.ts
@@ -1,5 +1,22 @@
-import { getText } from '../../testUtils';
+import fs from 'fs';
+import path from 'path';
+import { getText, isBuild } from '../../testUtils';
 
 test('should render component imported via svelte field in package.json', async () => {
 	expect(await getText('#test-id')).toBe('svelte field works');
 });
+
+if (!isBuild) {
+	test('should optimize nested deps of excluded svelte deps', () => {
+		const vitePrebundleMetadata = path.resolve(__dirname, '../node_modules/.vite/_metadata.json');
+		const metadataFile = fs.readFileSync(vitePrebundleMetadata, 'utf8');
+		const metadata = JSON.parse(metadataFile);
+		const optimizedPaths = Object.keys(metadata.optimized);
+		expect(optimizedPaths).not.toContain('e2e-test-dep-svelte-nested');
+		expect(optimizedPaths).not.toContain('e2e-test-dep-svelte-simple');
+		expect(optimizedPaths).toContain('e2e-test-dep-svelte-nested > e2e-test-dep-cjs-and-esm');
+		expect(optimizedPaths).toContain(
+			'e2e-test-dep-svelte-nested > e2e-test-dep-svelte-simple > e2e-test-dep-cjs-only'
+		);
+	});
+}
diff --git a/packages/e2e-tests/package-json-svelte-field/package.json b/packages/e2e-tests/package-json-svelte-field/package.json
index 603b07750..643b8de57 100644
--- a/packages/e2e-tests/package-json-svelte-field/package.json
+++ b/packages/e2e-tests/package-json-svelte-field/package.json
@@ -8,11 +8,11 @@
     "preview": "vite preview"
   },
   "dependencies": {
-    "e2e-tests-test-dependency-svelte-field": "workspace:*"
+    "e2e-test-dep-svelte-nested": "workspace:*"
   },
   "devDependencies": {
     "@sveltejs/vite-plugin-svelte": "workspace:*",
     "svelte": "^3.42.4",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   }
 }
diff --git a/packages/e2e-tests/package-json-svelte-field/src/App.svelte b/packages/e2e-tests/package-json-svelte-field/src/App.svelte
index 1ea271e98..f3c1b508f 100644
--- a/packages/e2e-tests/package-json-svelte-field/src/App.svelte
+++ b/packages/e2e-tests/package-json-svelte-field/src/App.svelte
@@ -1,6 +1,5 @@
 <script>
-	// eslint-disable-next-line node/no-missing-import
-	import { Message } from 'e2e-tests-test-dependency-svelte-field';
+	import { Message } from 'e2e-test-dep-svelte-nested';
 </script>
 
 <Message id="test-id" message="svelte field works" />
diff --git a/packages/e2e-tests/svelte-preprocess/package.json b/packages/e2e-tests/svelte-preprocess/package.json
index 4fb5aa46a..f787f1e31 100644
--- a/packages/e2e-tests/svelte-preprocess/package.json
+++ b/packages/e2e-tests/svelte-preprocess/package.json
@@ -12,6 +12,6 @@
     "svelte": "^3.42.4",
     "svelte-preprocess": "^4.8.0",
     "typescript": "^4.4.2",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   }
 }
diff --git a/packages/e2e-tests/test-dependency-svelte-field/package.json b/packages/e2e-tests/test-dependency-svelte-field/package.json
deleted file mode 100644
index 148cb1d67..000000000
--- a/packages/e2e-tests/test-dependency-svelte-field/package.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-  "version": "1.0.0",
-  "private": true,
-  "name": "e2e-tests-test-dependency-svelte-field",
-  "svelte": "src/components/svelte.js",
-  "files": [
-    "src",
-    "package.json"
-  ],
-  "exports": {
-    "./package.json": "./package.json"
-  },
-  "dependencies": {
-    "e2e-tests-hmr-test-dependency": "workspace:*"
-  }
-}
diff --git a/packages/e2e-tests/test-dependency-svelte-field/src/components/Message.svelte b/packages/e2e-tests/test-dependency-svelte-field/src/components/Message.svelte
deleted file mode 100644
index 097c838a2..000000000
--- a/packages/e2e-tests/test-dependency-svelte-field/src/components/Message.svelte
+++ /dev/null
@@ -1,6 +0,0 @@
-<script>
-	export let id = 'id';
-	export let message = '';
-</script>
-
-<div {id}>{message}</div>
diff --git a/packages/e2e-tests/test-dependency-svelte-field/src/components/svelte.js b/packages/e2e-tests/test-dependency-svelte-field/src/components/svelte.js
deleted file mode 100644
index 47e264fa2..000000000
--- a/packages/e2e-tests/test-dependency-svelte-field/src/components/svelte.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import Message from './Message.svelte';
-export { Message };
diff --git a/packages/e2e-tests/ts-type-import/package.json b/packages/e2e-tests/ts-type-import/package.json
index e9f6884cd..1837cd110 100644
--- a/packages/e2e-tests/ts-type-import/package.json
+++ b/packages/e2e-tests/ts-type-import/package.json
@@ -12,6 +12,6 @@
     "@tsconfig/svelte": "^2.0.1",
     "@types/node": "^16.7.8",
     "svelte-preprocess": "^4.8.0",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   }
 }
diff --git a/packages/e2e-tests/vite-ssr/package.json b/packages/e2e-tests/vite-ssr/package.json
index 7dac0fc62..fa433207f 100644
--- a/packages/e2e-tests/vite-ssr/package.json
+++ b/packages/e2e-tests/vite-ssr/package.json
@@ -17,6 +17,6 @@
     "express": "^4.17.1",
     "serve-static": "^1.14.1",
     "svelte": "^3.42.4",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   }
 }
diff --git a/packages/playground/big/package.json b/packages/playground/big/package.json
index 0ccd410d7..ab8e84aa0 100644
--- a/packages/playground/big/package.json
+++ b/packages/playground/big/package.json
@@ -10,6 +10,6 @@
   "devDependencies": {
     "@sveltejs/vite-plugin-svelte": "workspace:*",
     "svelte": "^3.42.4",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   }
 }
diff --git a/packages/playground/optimizedeps-include/package.json b/packages/playground/optimizedeps-include/package.json
index a2d47881c..6220321f6 100644
--- a/packages/playground/optimizedeps-include/package.json
+++ b/packages/playground/optimizedeps-include/package.json
@@ -12,6 +12,6 @@
     "@sveltejs/vite-plugin-svelte": "workspace:*",
     "svelte": "^3.42.4",
     "tinro": "^0.6.6",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   }
 }
diff --git a/packages/playground/preprocess-with-vite/package.json b/packages/playground/preprocess-with-vite/package.json
index 51479e922..7402635a9 100644
--- a/packages/playground/preprocess-with-vite/package.json
+++ b/packages/playground/preprocess-with-vite/package.json
@@ -12,6 +12,6 @@
     "sass": "^1.38.2",
     "stylus": "^0.54.8",
     "svelte": "^3.42.4",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   }
 }
diff --git a/packages/playground/windicss/package.json b/packages/playground/windicss/package.json
index 8f80c765e..22e237251 100644
--- a/packages/playground/windicss/package.json
+++ b/packages/playground/windicss/package.json
@@ -14,7 +14,7 @@
     "@sveltejs/vite-plugin-svelte": "workspace:*",
     "diff-match-patch": "^1.0.5",
     "svelte": "^3.42.4",
-    "vite": "^2.5.2",
+    "vite": "^2.5.3",
     "vite-plugin-windicss": "^1.3.0"
   }
 }
diff --git a/packages/vite-plugin-svelte/package.json b/packages/vite-plugin-svelte/package.json
index d4ef462f3..7faf0b64e 100644
--- a/packages/vite-plugin-svelte/package.json
+++ b/packages/vite-plugin-svelte/package.json
@@ -55,7 +55,7 @@
   "peerDependencies": {
     "diff-match-patch": "^1.0.5",
     "svelte": "^3.34.0",
-    "vite": "^2.3.7"
+    "vite": "^2.5.3"
   },
   "peerDependenciesMeta": {
     "diff-match-patch": {
@@ -70,6 +70,6 @@
     "rollup": "^2.56.3",
     "svelte": "^3.42.4",
     "tsup": "^4.14.0",
-    "vite": "^2.5.2"
+    "vite": "^2.5.3"
   }
 }
diff --git a/packages/vite-plugin-svelte/src/utils/__tests__/dependencies.spec.ts b/packages/vite-plugin-svelte/src/utils/__tests__/dependencies.spec.ts
index d028186b4..f572b3123 100644
--- a/packages/vite-plugin-svelte/src/utils/__tests__/dependencies.spec.ts
+++ b/packages/vite-plugin-svelte/src/utils/__tests__/dependencies.spec.ts
@@ -6,7 +6,7 @@ describe('dependencies', () => {
 		it('should find svelte dependencies in packages/e2e-test/hmr', async () => {
 			const deps = findRootSvelteDependencies(path.resolve('packages/e2e-tests/hmr'));
 			expect(deps).toHaveLength(1);
-			expect(deps[0].name).toBe('e2e-tests-hmr-test-dependency');
+			expect(deps[0].name).toBe('e2e-test-dep-svelte-simple');
 			expect(deps[0].path).toEqual([]);
 		});
 		it('should find nested svelte dependencies in packages/e2e-test/package-json-svelte-field', async () => {
@@ -14,9 +14,9 @@ describe('dependencies', () => {
 				path.resolve('packages/e2e-tests/package-json-svelte-field')
 			);
 			expect(deps).toHaveLength(2);
-			expect(deps[0].name).toBe('e2e-tests-test-dependency-svelte-field');
-			expect(deps[1].name).toBe('e2e-tests-hmr-test-dependency');
-			expect(deps[1].path).toEqual(['e2e-tests-test-dependency-svelte-field']);
+			expect(deps[0].name).toBe('e2e-test-dep-svelte-nested');
+			expect(deps[1].name).toBe('e2e-test-dep-svelte-simple');
+			expect(deps[1].path).toEqual(['e2e-test-dep-svelte-nested']);
 		});
 	});
 });
diff --git a/packages/vite-plugin-svelte/src/utils/options.ts b/packages/vite-plugin-svelte/src/utils/options.ts
index 7ef50b203..8f43e6a03 100644
--- a/packages/vite-plugin-svelte/src/utils/options.ts
+++ b/packages/vite-plugin-svelte/src/utils/options.ts
@@ -236,20 +236,19 @@ function buildOptimizeDepsForSvelte(
 	log.debug(`automatically excluding found svelte dependencies: ${svelteDepsToExclude.join(', ')}`);
 	exclude.push(...svelteDepsToExclude.filter((x) => !optimizeDeps?.exclude?.includes(x)));
 
-	/* // TODO enable once https://github.com/vitejs/vite/pull/4634 lands
 	const transitiveDepsToInclude = svelteDeps
 		.filter((dep) => svelteDepsToExclude.includes(dep.name))
 		.flatMap((dep) =>
 			Object.keys(dep.pkg.dependencies || {})
 				.filter((depOfDep) => !svelteDepsToExclude.includes(depOfDep))
-				.map((depOfDep) => dep.path.concat(depOfDep).join('>'))
+				.map((depOfDep) => dep.path.concat(dep.name, depOfDep).join(' > '))
 		);
 	log.debug(
 		`reincluding transitive dependencies of excluded svelte dependencies`,
 		transitiveDepsToInclude
 	);
 	include.push(...transitiveDepsToInclude);
-*/
+
 	return { include, exclude };
 }
 
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 20a21f135..5b701f427 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -50,7 +50,7 @@ importers:
       svelte: ^3.42.4
       ts-jest: ^27.0.5
       typescript: ^4.4.2
-      vite: ^2.5.2
+      vite: ^2.5.3
     devDependencies:
       '@changesets/cli': 2.16.0
       '@changesets/get-github-info': 0.5.0
@@ -94,7 +94,7 @@ importers:
       svelte: 3.42.4
       ts-jest: 27.0.5_d6279bcaf6e2c6aa91a58343d133ee67
       typescript: 4.4.2
-      vite: 2.5.2
+      vite: 2.5.3
 
   packages/e2e-tests:
     specifiers:
@@ -104,18 +104,41 @@ importers:
       css-color-names: 1.0.1
       tree-kill: 1.2.2
 
+  packages/e2e-tests/_test_dependencies/cjs-and-esm:
+    specifiers: {}
+
+  packages/e2e-tests/_test_dependencies/cjs-only:
+    specifiers: {}
+
+  packages/e2e-tests/_test_dependencies/esm-only:
+    specifiers: {}
+
+  packages/e2e-tests/_test_dependencies/svelte-nested:
+    specifiers:
+      e2e-test-dep-cjs-and-esm: workspace:*
+      e2e-test-dep-svelte-simple: workspace:*
+    dependencies:
+      e2e-test-dep-cjs-and-esm: link:../cjs-and-esm
+      e2e-test-dep-svelte-simple: link:../svelte-simple
+
+  packages/e2e-tests/_test_dependencies/svelte-simple:
+    specifiers:
+      e2e-test-dep-cjs-only: workspace:*
+    dependencies:
+      e2e-test-dep-cjs-only: link:../cjs-only
+
   packages/e2e-tests/autoprefixer-browerslist:
     specifiers:
       '@sveltejs/vite-plugin-svelte': workspace:*
       autoprefixer: ^10.3.3
-      e2e-tests-hmr-test-dependency: workspace:*
+      e2e-test-dep-svelte-simple: workspace:*
       postcss: ^8.3.6
       postcss-load-config: ^3.1.0
       svelte: ^3.42.4
       svelte-preprocess: ^4.8.0
-      vite: ^2.5.2
+      vite: ^2.5.3
     dependencies:
-      e2e-tests-hmr-test-dependency: link:../hmr-test-dependency
+      e2e-test-dep-svelte-simple: link:../_test_dependencies/svelte-simple
     devDependencies:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       autoprefixer: 10.3.3_postcss@8.3.6
@@ -123,63 +146,60 @@ importers:
       postcss-load-config: 3.1.0
       svelte: 3.42.4
       svelte-preprocess: 4.8.0_2a1072f850182c32279df48c7d9c0088
-      vite: 2.5.2
+      vite: 2.5.3
 
   packages/e2e-tests/configfile-custom:
     specifiers:
       '@sveltejs/vite-plugin-svelte': workspace:*
-      e2e-tests-hmr-test-dependency: workspace:*
+      e2e-test-dep-svelte-simple: workspace:*
       svelte: ^3.42.4
-      vite: ^2.5.2
+      vite: ^2.5.3
     dependencies:
-      e2e-tests-hmr-test-dependency: link:../hmr-test-dependency
+      e2e-test-dep-svelte-simple: link:../_test_dependencies/svelte-simple
     devDependencies:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       svelte: 3.42.4
-      vite: 2.5.2
+      vite: 2.5.3
 
   packages/e2e-tests/configfile-esm:
     specifiers:
       '@sveltejs/vite-plugin-svelte': workspace:*
-      e2e-tests-hmr-test-dependency: workspace:*
+      e2e-test-dep-svelte-simple: workspace:*
       svelte: ^3.42.4
       svelte-preprocess: ^4.8.0
-      vite: ^2.5.2
+      vite: ^2.5.3
     dependencies:
-      e2e-tests-hmr-test-dependency: link:../hmr-test-dependency
+      e2e-test-dep-svelte-simple: link:../_test_dependencies/svelte-simple
     devDependencies:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       svelte: 3.42.4
       svelte-preprocess: 4.8.0_svelte@3.42.4+typescript@4.4.2
-      vite: 2.5.2
+      vite: 2.5.3
 
   packages/e2e-tests/custom-extensions:
     specifiers:
       '@sveltejs/vite-plugin-svelte': workspace:*
       svelte: ^3.42.4
-      vite: ^2.5.2
+      vite: ^2.5.3
     devDependencies:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       svelte: 3.42.4
-      vite: 2.5.2
+      vite: 2.5.3
 
   packages/e2e-tests/hmr:
     specifiers:
       '@sveltejs/vite-plugin-svelte': workspace:*
-      e2e-tests-hmr-test-dependency: workspace:*
+      e2e-test-dep-svelte-simple: workspace:*
       node-fetch: ^2.6.1
       svelte: ^3.42.4
-      vite: ^2.5.2
+      vite: ^2.5.3
     dependencies:
-      e2e-tests-hmr-test-dependency: link:../hmr-test-dependency
+      e2e-test-dep-svelte-simple: link:../_test_dependencies/svelte-simple
     devDependencies:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       node-fetch: 2.6.1
       svelte: 3.42.4
-      vite: 2.5.2
-
-  packages/e2e-tests/hmr-test-dependency:
-    specifiers: {}
+      vite: 2.5.3
 
   packages/e2e-tests/kit-node:
     specifiers:
@@ -194,15 +214,15 @@ importers:
   packages/e2e-tests/package-json-svelte-field:
     specifiers:
       '@sveltejs/vite-plugin-svelte': workspace:*
-      e2e-tests-test-dependency-svelte-field: workspace:*
+      e2e-test-dep-svelte-nested: workspace:*
       svelte: ^3.42.4
-      vite: ^2.5.2
+      vite: ^2.5.3
     dependencies:
-      e2e-tests-test-dependency-svelte-field: link:../test-dependency-svelte-field
+      e2e-test-dep-svelte-nested: link:../_test_dependencies/svelte-nested
     devDependencies:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       svelte: 3.42.4
-      vite: 2.5.2
+      vite: 2.5.3
 
   packages/e2e-tests/svelte-preprocess:
     specifiers:
@@ -210,19 +230,13 @@ importers:
       svelte: ^3.42.4
       svelte-preprocess: ^4.8.0
       typescript: ^4.4.2
-      vite: ^2.5.2
+      vite: ^2.5.3
     devDependencies:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       svelte: 3.42.4
       svelte-preprocess: 4.8.0_svelte@3.42.4+typescript@4.4.2
       typescript: 4.4.2
-      vite: 2.5.2
-
-  packages/e2e-tests/test-dependency-svelte-field:
-    specifiers:
-      e2e-tests-hmr-test-dependency: workspace:*
-    dependencies:
-      e2e-tests-hmr-test-dependency: link:../hmr-test-dependency
+      vite: 2.5.3
 
   packages/e2e-tests/ts-type-import:
     specifiers:
@@ -230,13 +244,13 @@ importers:
       '@tsconfig/svelte': ^2.0.1
       '@types/node': ^16.7.8
       svelte-preprocess: ^4.8.0
-      vite: ^2.5.2
+      vite: ^2.5.3
     devDependencies:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       '@tsconfig/svelte': 2.0.1
       '@types/node': 16.7.8
       svelte-preprocess: 4.8.0_svelte@3.42.4+typescript@4.4.2
-      vite: 2.5.2
+      vite: 2.5.3
 
   packages/e2e-tests/vite-ssr:
     specifiers:
@@ -246,7 +260,7 @@ importers:
       express: ^4.17.1
       serve-static: ^1.14.1
       svelte: ^3.42.4
-      vite: ^2.5.2
+      vite: ^2.5.3
     devDependencies:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       compression: 1.7.4
@@ -254,7 +268,7 @@ importers:
       express: 4.17.1
       serve-static: 1.14.1
       svelte: 3.42.4
-      vite: 2.5.2
+      vite: 2.5.3
 
   packages/playground:
     specifiers: {}
@@ -263,11 +277,11 @@ importers:
     specifiers:
       '@sveltejs/vite-plugin-svelte': workspace:*
       svelte: ^3.42.4
-      vite: ^2.5.2
+      vite: ^2.5.3
     devDependencies:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       svelte: 3.42.4
-      vite: 2.5.2
+      vite: 2.5.3
 
   packages/playground/kit-demo-app:
     specifiers:
@@ -291,12 +305,12 @@ importers:
       '@sveltejs/vite-plugin-svelte': workspace:*
       svelte: ^3.42.4
       tinro: ^0.6.6
-      vite: ^2.5.2
+      vite: ^2.5.3
     devDependencies:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       svelte: 3.42.4
       tinro: 0.6.6
-      vite: 2.5.2
+      vite: 2.5.3
 
   packages/playground/preprocess-with-vite:
     specifiers:
@@ -304,20 +318,20 @@ importers:
       sass: ^1.38.2
       stylus: ^0.54.8
       svelte: ^3.42.4
-      vite: ^2.5.2
+      vite: ^2.5.3
     devDependencies:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       sass: 1.38.2
       stylus: 0.54.8
       svelte: 3.42.4
-      vite: 2.5.2
+      vite: 2.5.3
 
   packages/playground/windicss:
     specifiers:
       '@sveltejs/vite-plugin-svelte': workspace:*
       diff-match-patch: ^1.0.5
       svelte: ^3.42.4
-      vite: ^2.5.2
+      vite: ^2.5.3
       vite-plugin-windicss: ^1.3.0
       windicss: ^3.1.7
     dependencies:
@@ -326,8 +340,8 @@ importers:
       '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte
       diff-match-patch: 1.0.5
       svelte: 3.42.4
-      vite: 2.5.2
-      vite-plugin-windicss: 1.3.0_typescript@4.4.2+vite@2.5.2
+      vite: 2.5.3
+      vite-plugin-windicss: 1.3.0_typescript@4.4.2+vite@2.5.3
 
   packages/vite-plugin-svelte:
     specifiers:
@@ -344,7 +358,7 @@ importers:
       svelte: ^3.42.4
       svelte-hmr: ^0.14.7
       tsup: ^4.14.0
-      vite: ^2.5.2
+      vite: ^2.5.3
     dependencies:
       '@rollup/pluginutils': 4.1.1
       debug: 4.3.2
@@ -360,7 +374,7 @@ importers:
       rollup: 2.56.3
       svelte: 3.42.4
       tsup: 4.14.0_typescript@4.4.2
-      vite: 2.5.2
+      vite: 2.5.3
 
 packages:
 
@@ -1303,7 +1317,7 @@ packages:
       cheap-watch: 1.0.3
       sade: 1.7.4
       svelte: 3.42.4
-      vite: 2.5.2
+      vite: 2.5.3
     dev: true
 
   /@szmarczak/http-timer/1.1.2:
@@ -7592,15 +7606,15 @@ packages:
       extsprintf: 1.3.0
     dev: true
 
-  /vite-plugin-windicss/1.3.0_typescript@4.4.2+vite@2.5.2:
+  /vite-plugin-windicss/1.3.0_typescript@4.4.2+vite@2.5.3:
     resolution: {integrity: sha512-Xd9VxXX8z9bsdKs3iL6qXJDXsDDl/HQSWqJOLZFkkp23b3goGRnlT4Rlo5WeIAfrEV944r8bF7wfpDXCkk8XCg==}
     peerDependencies:
-      vite: ^2.5.0
+      vite: ^2.5.3
     dependencies:
       '@windicss/plugin-utils': 1.3.0_typescript@4.4.2
       chalk: 4.1.2
       debug: 4.3.2
-      vite: 2.5.2
+      vite: 2.5.3
       windicss: 3.1.7
     transitivePeerDependencies:
       - supports-color
@@ -7608,8 +7622,8 @@ packages:
       - typescript
     dev: true
 
-  /vite/2.5.2:
-    resolution: {integrity: sha512-JK5uhiVyMqHiAJbgBa8rCvpP8bEhAE9dKDv1gCmP+EUP2FSPmEeW3WXlCXauPB3MDa8behPW+ntyNXqnGaxslg==}
+  /vite/2.5.3:
+    resolution: {integrity: sha512-1wMDnjflvtTTkMov8O/Xb5+w1/VW/Gw8oCf8f6dqgHn8lMOEqq0SaPtFEQeikFcOKCfSbiU0nEi0LDIx6DNsaQ==}
     engines: {node: '>=12.2.0'}
     hasBin: true
     dependencies:
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index e9304922b..a378f8cb5 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,4 +1,5 @@
 packages:
   - 'packages/*'
   - 'packages/e2e-tests/*'
+  - 'packages/e2e-tests/_test_dependencies/*'
   - 'packages/playground/*'