From 8d0708a5b1438f6c6b675040f0941ee233be9270 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 13 Dec 2024 19:28:03 +0900 Subject: [PATCH] fix: fix and test module runner dynamic import --- packages/vite/src/node/server/environments/rolldown.ts | 10 +++++----- playground/rolldown-dev-ssr/__tests__/basic.spec.ts | 5 +++++ playground/rolldown-dev-ssr/src/dynamic-import.tsx | 1 + playground/rolldown-dev-ssr/src/entry-server.tsx | 7 ++++++- 4 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 playground/rolldown-dev-ssr/src/dynamic-import.tsx diff --git a/packages/vite/src/node/server/environments/rolldown.ts b/packages/vite/src/node/server/environments/rolldown.ts index 580db1764e3eae..70a0d2d21d1112 100644 --- a/packages/vite/src/node/server/environments/rolldown.ts +++ b/packages/vite/src/node/server/environments/rolldown.ts @@ -488,13 +488,13 @@ function patchRuntimePlugin(environment: RolldownEnvironment): rolldown.Plugin { __rolldown_runtime.manifest = ${JSON.stringify(manifest, null, 2)}; ` } - if (chunk.name === 'hmr-update') { - // patch on hmr - if (environment.name === 'ssr') { - chunk.code += ` + if (environment.name === 'ssr' && !chunk.isEntry) { + chunk.code += ` var __rolldown_runtime = __rolldown_module_runner_context.__rolldown_runtime; ` - } + } + if (chunk.name === 'hmr-update') { + // patch on hmr chunk.code += ` __rolldown_runtime.patch(__rolldown_modules); ` diff --git a/playground/rolldown-dev-ssr/__tests__/basic.spec.ts b/playground/rolldown-dev-ssr/__tests__/basic.spec.ts index c1516731894bff..31bd451e15494e 100644 --- a/playground/rolldown-dev-ssr/__tests__/basic.spec.ts +++ b/playground/rolldown-dev-ssr/__tests__/basic.spec.ts @@ -30,3 +30,8 @@ test.runIf(!isBuild)('hmr', async () => { const res = await page.request.get(viteTestUrl) expect(await res.text()).toContain('Count-x-y') }) + +test('dynamic-import', async () => { + const res = await page.goto(viteTestUrl + '/dynamic-import') + expect(await res?.text()).toContain('[dynamic-import-ok]') +}) diff --git a/playground/rolldown-dev-ssr/src/dynamic-import.tsx b/playground/rolldown-dev-ssr/src/dynamic-import.tsx new file mode 100644 index 00000000000000..6c6981d726d0cc --- /dev/null +++ b/playground/rolldown-dev-ssr/src/dynamic-import.tsx @@ -0,0 +1 @@ +export default '[dynamic-import-ok]' diff --git a/playground/rolldown-dev-ssr/src/entry-server.tsx b/playground/rolldown-dev-ssr/src/entry-server.tsx index d802819671dc04..0487b104c903ea 100644 --- a/playground/rolldown-dev-ssr/src/entry-server.tsx +++ b/playground/rolldown-dev-ssr/src/entry-server.tsx @@ -3,12 +3,17 @@ import type { Connect } from 'vite' import { App } from './app' import { throwError } from './error' -const handler: Connect.SimpleHandleFunction = (req, res) => { +const handler: Connect.SimpleHandleFunction = async (req, res) => { const url = new URL(req.url ?? '/', 'https://vite.dev') console.log(`[SSR] ${req.method} ${url.pathname}`) if (url.pathname === '/crash-ssr') { throwError() } + if (url.pathname === '/dynamic-import') { + const mod = await import('./dynamic-import') + res.end(mod.default) + return + } const ssrHtml = ReactDOMServer.renderToString() res.setHeader('content-type', 'text/html') // TODO: transformIndexHtml?