Skip to content

Commit 45549e4

Browse files
authoredMar 22, 2023
fix(ssr): hoist re-exports with imports (#12530)
1 parent 63524ba commit 45549e4

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed
 

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

+6-3
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,11 @@ test('export * from', async () => {
103103
),
104104
).toMatchInlineSnapshot(`
105105
"const __vite_ssr_import_0__ = await __vite_ssr_import__(\\"vue\\");
106-
const __vite_ssr_import_1__ = await __vite_ssr_import__(\\"react\\");
107106
__vite_ssr_exportAll__(__vite_ssr_import_0__);
108-
__vite_ssr_exportAll__(__vite_ssr_import_1__);"
107+
const __vite_ssr_import_1__ = await __vite_ssr_import__(\\"react\\");
108+
__vite_ssr_exportAll__(__vite_ssr_import_1__);
109+
110+
"
109111
`)
110112
})
111113

@@ -132,7 +134,8 @@ test('export then import minified', async () => {
132134
).toMatchInlineSnapshot(`
133135
"const __vite_ssr_import_0__ = await __vite_ssr_import__(\\"vue\\");
134136
const __vite_ssr_import_1__ = await __vite_ssr_import__(\\"vue\\");
135-
__vite_ssr_exportAll__(__vite_ssr_import_1__);"
137+
__vite_ssr_exportAll__(__vite_ssr_import_1__);
138+
"
136139
`)
137140
})
138141

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

+5-3
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,10 @@ async function ssrTransformScript(
164164
if (node.source) {
165165
// export { foo, bar } from './foo'
166166
const importId = defineImport(node.source.value as string)
167+
// hoist re-exports near the defined import so they are immediately exported
167168
for (const spec of node.specifiers) {
168169
defineExport(
169-
node.end,
170+
0,
170171
spec.exported.name,
171172
`${importId}.${spec.local.name}`,
172173
)
@@ -213,10 +214,11 @@ async function ssrTransformScript(
213214
if (node.type === 'ExportAllDeclaration') {
214215
s.remove(node.start, node.end)
215216
const importId = defineImport(node.source.value as string)
217+
// hoist re-exports near the defined import so they are immediately exported
216218
if (node.exported) {
217-
defineExport(node.end, node.exported.name, `${importId}`)
219+
defineExport(0, node.exported.name, `${importId}`)
218220
} else {
219-
s.appendLeft(node.end, `${ssrExportAllKey}(${importId});`)
221+
s.appendLeft(0, `${ssrExportAllKey}(${importId});\n`)
220222
}
221223
}
222224
}

0 commit comments

Comments
 (0)
Please sign in to comment.