Skip to content

Commit f20d285

Browse files
mrm007antfu
authored andcommitted
fix(build): fix resolution algorithm when build.ssr is true (#9989)
1 parent 01aa224 commit f20d285

File tree

12 files changed

+94
-1
lines changed

12 files changed

+94
-1
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,11 @@ export function tryNodeResolve(
721721
let resolvedId = id
722722
if (isDeepImport) {
723723
if (!pkg?.data.exports && path.extname(id) !== resolvedExt) {
724-
resolvedId += resolvedExt
724+
resolvedId = resolved.id.slice(resolved.id.indexOf(id))
725+
isDebug &&
726+
debug(
727+
`[processResult] ${colors.cyan(id)} -> ${colors.dim(resolvedId)}`
728+
)
725729
}
726730
}
727731
return { ...resolved, id: resolvedId, external: true }
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { expect, test } from 'vitest'
2+
import { isBuild, readFile, testDir } from '~utils'
3+
4+
test.runIf(isBuild)('correctly resolve entrypoints', async () => {
5+
const contents = readFile('dist/main.mjs')
6+
7+
const _ = `['"]`
8+
expect(contents).toMatch(new RegExp(`from ${_}entries/dir/index.js${_}`))
9+
expect(contents).toMatch(new RegExp(`from ${_}entries/file.js${_}`))
10+
expect(contents).toMatch(new RegExp(`from ${_}pkg-exports/entry${_}`))
11+
12+
await expect(import(`${testDir}/dist/main.mjs`)).resolves.toBeTruthy()
13+
})
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = __filename.slice(__filename.lastIndexOf('entries'))
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = __filename.slice(__filename.lastIndexOf('entries'))
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"name": "entries",
3+
"private": true,
4+
"version": "0.0.0"
5+
}

playground/ssr-resolve/main.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// no `exports` key, should resolve to entries/dir/index.js
2+
import dirEntry from 'entries/dir'
3+
// no `exports` key, should resolve to entries/file.js
4+
import fileEntry from 'entries/file'
5+
// has `exports` key, should resolve to pkg-exports/entry
6+
import pkgExportsEntry from 'pkg-exports/entry'
7+
8+
export default `
9+
entries/dir: ${dirEntry}
10+
entries/file: ${fileEntry}
11+
pkg-exports/entry: ${pkgExportsEntry}
12+
`
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"name": "ssr-resolve",
3+
"private": true,
4+
"version": "0.0.0",
5+
"scripts": {
6+
"build": "vite build",
7+
"debug": "node --inspect-brk ../../packages/vite/bin/vite build"
8+
},
9+
"dependencies": {
10+
"entries": "file:./entries",
11+
"pkg-exports": "file:./pkg-exports"
12+
}
13+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = 'pkg-exports entry'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = undefined
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"name": "pkg-exports",
3+
"private": true,
4+
"version": "0.0.0",
5+
"exports": {
6+
".": "./index.js",
7+
"./entry": "./entry.js"
8+
}
9+
}

0 commit comments

Comments
 (0)