diff --git a/packages/playground/nested-deps/__tests__/nested-deps.spec.ts b/packages/playground/nested-deps/__tests__/nested-deps.spec.ts
new file mode 100644
index 00000000000000..9b2fb9546dbcbb
--- /dev/null
+++ b/packages/playground/nested-deps/__tests__/nested-deps.spec.ts
@@ -0,0 +1,5 @@
+test('handle nested package', async () => {
+ expect(await page.textContent('.a')).toBe('A@2.0.0')
+ expect(await page.textContent('.b')).toBe('B@1.0.0')
+ expect(await page.textContent('.nested-a')).toBe('A@1.0.0')
+})
diff --git a/packages/playground/nested-deps/index.html b/packages/playground/nested-deps/index.html
new file mode 100644
index 00000000000000..9759e87db4df54
--- /dev/null
+++ b/packages/playground/nested-deps/index.html
@@ -0,0 +1,21 @@
+
direct dependency A
+
+
+direct dependency B
+
+
+nested dependency A
+
+
+
diff --git a/packages/playground/nested-deps/package.json b/packages/playground/nested-deps/package.json
new file mode 100644
index 00000000000000..5c9c814a5252a6
--- /dev/null
+++ b/packages/playground/nested-deps/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "@test/nested-deps",
+ "private": true,
+ "version": "0.0.0",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "debug": "node --inspect-brk ../../vite/bin/vite",
+ "serve": "vite preview"
+ },
+ "dependencies": {
+ "test-package-a": "link:./test-package-a",
+ "test-package-b": "link:./test-package-b"
+ }
+}
diff --git a/packages/playground/nested-deps/test-package-a/index.js b/packages/playground/nested-deps/test-package-a/index.js
new file mode 100644
index 00000000000000..1006df3cf11913
--- /dev/null
+++ b/packages/playground/nested-deps/test-package-a/index.js
@@ -0,0 +1 @@
+export default 'A@2.0.0'
diff --git a/packages/playground/nested-deps/test-package-a/package.json b/packages/playground/nested-deps/test-package-a/package.json
new file mode 100644
index 00000000000000..5055f3dd623043
--- /dev/null
+++ b/packages/playground/nested-deps/test-package-a/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "test-package-a",
+ "version": "2.0.0",
+ "main": "index.js"
+}
diff --git a/packages/playground/nested-deps/test-package-b/index.js b/packages/playground/nested-deps/test-package-b/index.js
new file mode 100644
index 00000000000000..e61d484f4f3b10
--- /dev/null
+++ b/packages/playground/nested-deps/test-package-b/index.js
@@ -0,0 +1,3 @@
+export { default as A } from 'test-package-a'
+
+export default 'B@1.0.0'
diff --git a/packages/playground/nested-deps/test-package-b/node_modules/test-package-a/index.js b/packages/playground/nested-deps/test-package-b/node_modules/test-package-a/index.js
new file mode 100644
index 00000000000000..8b21e17752a5a6
--- /dev/null
+++ b/packages/playground/nested-deps/test-package-b/node_modules/test-package-a/index.js
@@ -0,0 +1 @@
+export default 'A@1.0.0'
diff --git a/packages/playground/nested-deps/test-package-b/node_modules/test-package-a/package.json b/packages/playground/nested-deps/test-package-b/node_modules/test-package-a/package.json
new file mode 100644
index 00000000000000..ce18862474971d
--- /dev/null
+++ b/packages/playground/nested-deps/test-package-b/node_modules/test-package-a/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "test-package-a",
+ "version": "1.0.0",
+ "main": "index.js"
+}
diff --git a/packages/playground/nested-deps/test-package-b/package.json b/packages/playground/nested-deps/test-package-b/package.json
new file mode 100644
index 00000000000000..342cf2ded23e3b
--- /dev/null
+++ b/packages/playground/nested-deps/test-package-b/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "test-package-b",
+ "version": "1.0.0",
+ "main": "index.js"
+}
diff --git a/packages/playground/nested-deps/vite.config.js b/packages/playground/nested-deps/vite.config.js
new file mode 100644
index 00000000000000..e512df128f26bf
--- /dev/null
+++ b/packages/playground/nested-deps/vite.config.js
@@ -0,0 +1,8 @@
+/**
+ * @type {import('vite').UserConfig}
+ */
+module.exports = {
+ optimizeDeps: {
+ include: ['test-package-a', 'test-package-b']
+ }
+}
diff --git a/packages/vite/src/node/optimizer/esbuildDepPlugin.ts b/packages/vite/src/node/optimizer/esbuildDepPlugin.ts
index 7459c3b21e613a..1e2919b8101c68 100644
--- a/packages/vite/src/node/optimizer/esbuildDepPlugin.ts
+++ b/packages/vite/src/node/optimizer/esbuildDepPlugin.ts
@@ -94,7 +94,7 @@ export function esbuildDepPlugin(
namespace: 'dep'
}
: {
- path: require.resolve(qualified[flatId], {
+ path: require.resolve(id, {
paths: [resolveDir]
})
}
diff --git a/yarn.lock b/yarn.lock
index c8ee69c31b8a38..428ff4fadf5ce0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6922,6 +6922,14 @@ test-exclude@^6.0.0:
glob "^7.1.4"
minimatch "^3.0.4"
+"test-package-a@link:./packages/playground/nested-deps/test-package-a":
+ version "0.0.0"
+ uid ""
+
+"test-package-b@link:./packages/playground/nested-deps/test-package-b":
+ version "0.0.0"
+ uid ""
+
text-extensions@^1.0.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"