Skip to content

Commit ea27701

Browse files
authoredJul 22, 2022
fix(ssr): no external symlink package (#9296)
1 parent 0602017 commit ea27701

File tree

7 files changed

+31
-1
lines changed

7 files changed

+31
-1
lines changed
 

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

+4
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,10 @@ export function tryNodeResolve(
656656
if (!externalize) {
657657
return resolved
658658
}
659+
// dont external symlink packages
660+
if (!resolved.id.includes('node_modules')) {
661+
return
662+
}
659663
const resolvedExt = path.extname(resolved.id)
660664
let resolvedId = id
661665
if (isDeepImport) {

‎playground/ssr-deps/__tests__/ssr-deps.spec.ts

+5
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,8 @@ test('msg from external using external entry', async () => {
9898
'Hello World!'
9999
)
100100
})
101+
102+
test('msg from linked no external', async () => {
103+
await page.goto(url)
104+
expect(await page.textContent('.linked-no-external')).toMatch('Hello World!')
105+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export const hello = function () {
2+
// make sure linked package is not externalized so Vite features like
3+
// import.meta.env works (or handling TS files)
4+
return import.meta.env.DEV && 'Hello World!'
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "linked-no-external",
3+
"private": true,
4+
"type": "module",
5+
"version": "0.0.0"
6+
}

‎playground/ssr-deps/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
"optimized-with-nested-external": "file:./optimized-with-nested-external",
2727
"optimized-cjs-with-nested-external": "file:./optimized-with-nested-external",
2828
"external-using-external-entry": "file:./external-using-external-entry",
29-
"external-entry": "file:./external-entry"
29+
"external-entry": "file:./external-entry",
30+
"linked-no-external": "link:./linked-no-external"
3031
},
3132
"devDependencies": {
3233
"cross-env": "^7.0.3",

‎playground/ssr-deps/src/app.js

+4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import onlyObjectAssignedExports from 'only-object-assigned-exports'
1111
import requireAbsolute from 'require-absolute'
1212
import noExternalCjs from 'no-external-cjs'
1313
import importBuiltinCjs from 'import-builtin-cjs'
14+
import { hello as linkedNoExternal } from 'linked-no-external'
1415

1516
// This import will set a 'Hello World!" message in the nested-external non-entry dependency
1617
import 'non-optimized-with-nested-external'
@@ -75,5 +76,8 @@ export async function render(url, rootDir) {
7576
const externalUsingExternalEntryMessage = externalUsingExternalEntry.hello()
7677
html += `\n<p class="external-using-external-entry">message from external-using-external-entry: ${externalUsingExternalEntryMessage}</p>`
7778

79+
const linkedNoExternalMessage = linkedNoExternal()
80+
html += `\n<p class="linked-no-external">message from linked-no-external: ${linkedNoExternalMessage}</p>`
81+
7882
return html + '\n'
7983
}

‎pnpm-lock.yaml

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