diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index b5e1d9c57e5f19..c1d468550c7349 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -563,7 +563,7 @@ export async function _createServer( return devHtmlTransformFn(server, url, html, originalUrl) }, async ssrLoadModule(url, opts?: { fixStacktrace?: boolean }) { - return ssrLoadModule(url, server, undefined, opts?.fixStacktrace) + return ssrLoadModule(url, server, opts?.fixStacktrace) }, async ssrFetchModule(url: string, importer?: string) { return ssrFetchModule(server, url, importer) diff --git a/packages/vite/src/node/ssr/__tests__/fixtures/global/export.js b/packages/vite/src/node/ssr/__tests__/fixtures/global/export.js new file mode 100644 index 00000000000000..21a4d16cc984f3 --- /dev/null +++ b/packages/vite/src/node/ssr/__tests__/fixtures/global/export.js @@ -0,0 +1 @@ +export const global = 'ok' diff --git a/packages/vite/src/node/ssr/__tests__/fixtures/global/test.js b/packages/vite/src/node/ssr/__tests__/fixtures/global/test.js new file mode 100644 index 00000000000000..69a4388d2ef74b --- /dev/null +++ b/packages/vite/src/node/ssr/__tests__/fixtures/global/test.js @@ -0,0 +1 @@ +export default global diff --git a/packages/vite/src/node/ssr/__tests__/ssrLoadModule.spec.ts b/packages/vite/src/node/ssr/__tests__/ssrLoadModule.spec.ts index b3f3c2364ef04b..a7ae119f0714f8 100644 --- a/packages/vite/src/node/ssr/__tests__/ssrLoadModule.spec.ts +++ b/packages/vite/src/node/ssr/__tests__/ssrLoadModule.spec.ts @@ -62,3 +62,15 @@ test('import.meta.filename/dirname returns same value with Node', async () => { expect(viteValue.dirname).toBe(path.dirname(filename)) expect(viteValue.filename).toBe(filename) }) + +test('can export global', async () => { + const server = await createDevServer() + const mod = await server.ssrLoadModule('/fixtures/global/export.js') + expect(mod.global).toBe('ok') +}) + +test('can access nodejs global', async () => { + const server = await createDevServer() + const mod = await server.ssrLoadModule('/fixtures/global/test.js') + expect(mod.default).toBe(globalThis) +}) diff --git a/packages/vite/src/node/ssr/ssrModuleLoader.ts b/packages/vite/src/node/ssr/ssrModuleLoader.ts index 0de9847860ba3a..34856d7c90ac6c 100644 --- a/packages/vite/src/node/ssr/ssrModuleLoader.ts +++ b/packages/vite/src/node/ssr/ssrModuleLoader.ts @@ -27,10 +27,6 @@ import { } from './ssrTransform' import { ssrFixStacktrace } from './ssrStacktrace' -interface SSRContext { - global: typeof globalThis -} - type SSRModule = Record interface NodeImportResolveOptions @@ -45,7 +41,6 @@ const importErrors = new WeakMap() export async function ssrLoadModule( url: string, server: ViteDevServer, - context: SSRContext = { global }, fixStacktrace?: boolean, ): Promise { url = unwrapId(url) @@ -59,7 +54,7 @@ export async function ssrLoadModule( return pending } - const modulePromise = instantiateModule(url, server, context, fixStacktrace) + const modulePromise = instantiateModule(url, server, fixStacktrace) pendingModules.set(url, modulePromise) modulePromise .catch(() => { @@ -74,7 +69,6 @@ export async function ssrLoadModule( async function instantiateModule( url: string, server: ViteDevServer, - context: SSRContext = { global }, fixStacktrace?: boolean, ): Promise { const { moduleGraph } = server @@ -169,7 +163,7 @@ async function instantiateModule( } } - return ssrLoadModule(dep, server, context, fixStacktrace) + return ssrLoadModule(dep, server, fixStacktrace) } catch (err) { // tell external error handler which mod was imported with error importErrors.set(err, { importee: dep }) @@ -213,7 +207,6 @@ async function instantiateModule( try { const initModule = new AsyncFunction( - `global`, ssrModuleExportsKey, ssrImportMetaKey, ssrImportKey, @@ -224,7 +217,6 @@ async function instantiateModule( `\n//# sourceURL=${mod.id}${sourceMapSuffix}`, ) await initModule( - context.global, ssrModule, ssrImportMeta, ssrImport,