diff --git a/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts b/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts index e086365ee25f16..a5f915edea97fd 100644 --- a/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts +++ b/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts @@ -657,3 +657,26 @@ export function fn1() { " `) }) + +// https://github.com/vitest-dev/vitest/issues/1141 +test('export default expression', async () => { + // esbuild transform result of following TS code + // export default function getRandom() { + // return Math.random() + // } + const code = ` +export default (function getRandom() { + return Math.random(); +}); +`.trim() + + expect((await ssrTransform(code, null, null)).code).toMatchInlineSnapshot(` + "__vite_ssr_exports__.default = (function getRandom() { + return Math.random(); + });" + `) + + expect( + (await ssrTransform(`export default (class A {});`, null, null)).code + ).toMatchInlineSnapshot(`"__vite_ssr_exports__.default = (class A {});"`) +}) diff --git a/packages/vite/src/node/ssr/ssrTransform.ts b/packages/vite/src/node/ssr/ssrTransform.ts index 56b75f8dd14913..79ccd25f9ca8ff 100644 --- a/packages/vite/src/node/ssr/ssrTransform.ts +++ b/packages/vite/src/node/ssr/ssrTransform.ts @@ -143,7 +143,12 @@ export async function ssrTransform( // default export if (node.type === 'ExportDefaultDeclaration') { - if ('id' in node.declaration && node.declaration.id) { + const expressionTypes = ['FunctionExpression', 'ClassExpression'] + if ( + 'id' in node.declaration && + node.declaration.id && + !expressionTypes.includes(node.declaration.type) + ) { // named hoistable/class exports // export default function foo() {} // export default class A {}