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"