Skip to content

Commit 6aa2206

Browse files
authoredAug 2, 2024··
fix(ssr): fix global variable name conflict (#17809)
1 parent 0f56e17 commit 6aa2206

File tree

5 files changed

+17
-11
lines changed

5 files changed

+17
-11
lines changed
 

‎packages/vite/src/node/server/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@ export async function _createServer(
563563
return devHtmlTransformFn(server, url, html, originalUrl)
564564
},
565565
async ssrLoadModule(url, opts?: { fixStacktrace?: boolean }) {
566-
return ssrLoadModule(url, server, undefined, opts?.fixStacktrace)
566+
return ssrLoadModule(url, server, opts?.fixStacktrace)
567567
},
568568
async ssrFetchModule(url: string, importer?: string) {
569569
return ssrFetchModule(server, url, importer)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const global = 'ok'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default global

‎packages/vite/src/node/ssr/__tests__/ssrLoadModule.spec.ts

+12
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,15 @@ test('import.meta.filename/dirname returns same value with Node', async () => {
6262
expect(viteValue.dirname).toBe(path.dirname(filename))
6363
expect(viteValue.filename).toBe(filename)
6464
})
65+
66+
test('can export global', async () => {
67+
const server = await createDevServer()
68+
const mod = await server.ssrLoadModule('/fixtures/global/export.js')
69+
expect(mod.global).toBe('ok')
70+
})
71+
72+
test('can access nodejs global', async () => {
73+
const server = await createDevServer()
74+
const mod = await server.ssrLoadModule('/fixtures/global/test.js')
75+
expect(mod.default).toBe(globalThis)
76+
})

‎packages/vite/src/node/ssr/ssrModuleLoader.ts

+2-10
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,6 @@ import {
2727
} from './ssrTransform'
2828
import { ssrFixStacktrace } from './ssrStacktrace'
2929

30-
interface SSRContext {
31-
global: typeof globalThis
32-
}
33-
3430
type SSRModule = Record<string, any>
3531

3632
interface NodeImportResolveOptions
@@ -45,7 +41,6 @@ const importErrors = new WeakMap<Error, { importee: string }>()
4541
export async function ssrLoadModule(
4642
url: string,
4743
server: ViteDevServer,
48-
context: SSRContext = { global },
4944
fixStacktrace?: boolean,
5045
): Promise<SSRModule> {
5146
url = unwrapId(url)
@@ -59,7 +54,7 @@ export async function ssrLoadModule(
5954
return pending
6055
}
6156

62-
const modulePromise = instantiateModule(url, server, context, fixStacktrace)
57+
const modulePromise = instantiateModule(url, server, fixStacktrace)
6358
pendingModules.set(url, modulePromise)
6459
modulePromise
6560
.catch(() => {
@@ -74,7 +69,6 @@ export async function ssrLoadModule(
7469
async function instantiateModule(
7570
url: string,
7671
server: ViteDevServer,
77-
context: SSRContext = { global },
7872
fixStacktrace?: boolean,
7973
): Promise<SSRModule> {
8074
const { moduleGraph } = server
@@ -169,7 +163,7 @@ async function instantiateModule(
169163
}
170164
}
171165

172-
return ssrLoadModule(dep, server, context, fixStacktrace)
166+
return ssrLoadModule(dep, server, fixStacktrace)
173167
} catch (err) {
174168
// tell external error handler which mod was imported with error
175169
importErrors.set(err, { importee: dep })
@@ -213,7 +207,6 @@ async function instantiateModule(
213207

214208
try {
215209
const initModule = new AsyncFunction(
216-
`global`,
217210
ssrModuleExportsKey,
218211
ssrImportMetaKey,
219212
ssrImportKey,
@@ -224,7 +217,6 @@ async function instantiateModule(
224217
`\n//# sourceURL=${mod.id}${sourceMapSuffix}`,
225218
)
226219
await initModule(
227-
context.global,
228220
ssrModule,
229221
ssrImportMeta,
230222
ssrImport,

0 commit comments

Comments
 (0)
Please sign in to comment.