Skip to content

Commit 34fec41

Browse files
authoredDec 12, 2022
fix: wrongly resolve to optimized doppelganger (#11290)
1 parent 8856c2e commit 34fec41

File tree

12 files changed

+127
-5
lines changed

12 files changed

+127
-5
lines changed
 

‎packages/vite/src/node/plugins/resolve.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -874,13 +874,15 @@ export async function tryOptimizedResolve(
874874

875875
const metadata = depsOptimizer.metadata
876876

877-
const depInfo = optimizedDepInfoFromId(metadata, id)
878-
if (depInfo) {
879-
return depsOptimizer.getOptimizedDepId(depInfo)
877+
if (!importer) {
878+
// no importer. try our best to find an optimized dep
879+
const depInfo = optimizedDepInfoFromId(metadata, id)
880+
if (depInfo) {
881+
return depsOptimizer.getOptimizedDepId(depInfo)
882+
}
883+
return
880884
}
881885

882-
if (!importer) return
883-
884886
// further check if id is imported by nested dependency
885887
let resolvedSrc: string | undefined
886888

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { expect, test } from 'vitest'
2+
import { page } from '~utils'
3+
4+
test('resolve-optimized-dup-deps', async () => {
5+
expect(await page.textContent('.a')).toBe('test-package-a:test-package-b-v2')
6+
expect(await page.textContent('.b')).toBe('test-package-b-v1')
7+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<h2>direct dependency A</h2>
2+
<pre class="a"></pre>
3+
4+
<h2>direct dependency B</h2>
5+
<pre class="b"></pre>
6+
7+
<script type="module">
8+
import A from '@vitejs/test-resolve-optimized-dup-deps-package-a'
9+
import B from '@vitejs/test-resolve-optimized-dup-deps-package-b'
10+
11+
text('.a', A)
12+
text('.b', B)
13+
14+
function text(sel, text) {
15+
document.querySelector(sel).textContent = text
16+
}
17+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import b from '@vitejs/test-resolve-optimized-dup-deps-package-b'
2+
3+
// should get test-package-a:test-package-b-v2
4+
const result = 'test-package-a:' + b
5+
6+
export default result
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"name": "@vitejs/test-resolve-optimized-dup-deps-package-a",
3+
"private": true,
4+
"version": "1.0.0",
5+
"main": "index.js",
6+
"dependencies": {
7+
"@vitejs/test-resolve-optimized-dup-deps-package-b": "file:../package-b-v2"
8+
}
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// test-package-b-v1 is install and imported by user
2+
// it is written in cjs and should be optimized
3+
module.exports = 'test-package-b-v1'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "@vitejs/test-resolve-optimized-dup-deps-package-b",
3+
"private": true,
4+
"version": "1.0.0",
5+
"main": "index.js"
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// test-package-b-v2 is install and imported by test-package-a
2+
// it is written in esm. it is not optimized
3+
export default 'test-package-b-v2'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "@vitejs/test-resolve-optimized-dup-deps-package-b",
3+
"private": true,
4+
"version": "2.0.0",
5+
"main": "index.js"
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "@vitejs/test-resolve-optimized-dup-deps",
3+
"private": true,
4+
"version": "0.0.0",
5+
"scripts": {
6+
"dev": "vite",
7+
"build": "vite build",
8+
"debug": "node --inspect-brk ../../packages/vite/bin/vite",
9+
"preview": "vite preview"
10+
},
11+
"dependencies": {
12+
"@vitejs/test-resolve-optimized-dup-deps-package-a": "file:./package-a",
13+
"@vitejs/test-resolve-optimized-dup-deps-package-b": "file:./package-b-v1"
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**
2+
* @type {import('vite').UserConfig}
3+
*/
4+
module.exports = {
5+
optimizeDeps: {
6+
exclude: ['@vitejs/test-resolve-optimized-dup-deps-package-a'],
7+
},
8+
}

‎pnpm-lock.yaml

+40
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
Please sign in to comment.