Skip to content

Commit 7229251

Browse files
authoredSep 21, 2022
fix(build): fix resolution algorithm when build.ssr is true (#9989)
1 parent dfa22ca commit 7229251

File tree

12 files changed

+94
-1
lines changed

12 files changed

+94
-1
lines changed
 

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

+5-1
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 }
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+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = __filename.slice(__filename.lastIndexOf('entries'))
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = __filename.slice(__filename.lastIndexOf('entries'))
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

+12
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+
`

‎playground/ssr-resolve/package.json

+13
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+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = 'pkg-exports entry'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = undefined
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+
}

‎playground/ssr-resolve/vite.config.js

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { defineConfig } from 'vite'
2+
3+
export default defineConfig({
4+
build: {
5+
ssr: './main.js'
6+
}
7+
})

‎pnpm-lock.yaml

+26
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.