From 00456997cc1bc07b8ab1743f410016ac05dc02db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Sat, 28 Mar 2026 09:46:37 +0100 Subject: [PATCH 1/2] fix(vite): resolve server entry filename from bundle chunks When users customize rollupOptions.output.entryFileNames, the server entry file gets renamed but the generated server.js still imported from the default "server-entry.mjs". Fix by reading the entry filename directly from the bundle chunks, which always reflects the actual output filename regardless of rollup config overrides. Closes #3655 Co-Authored-By: Claude Opus 4.6 (1M context) --- packages/plugin-vite/src/plugins/server_entry.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/plugin-vite/src/plugins/server_entry.ts b/packages/plugin-vite/src/plugins/server_entry.ts index 4277da7fd82..629f91f91dc 100644 --- a/packages/plugin-vite/src/plugins/server_entry.ts +++ b/packages/plugin-vite/src/plugins/server_entry.ts @@ -103,6 +103,16 @@ if (import.meta.hot) import.meta.hot.accept();`; }, }, async writeBundle(_options, bundle) { + // Find server entry filename directly from bundle chunks. + // This is more reliable than the manifest when rollupOptions + // override output.entryFileNames. + for (const chunk of Object.values(bundle)) { + if (chunk.type === "chunk" && chunk.isEntry) { + serverEntryFilename = chunk.fileName; + break; + } + } + const manifest = bundle[".vite/manifest.json"]; const staticFiles: PendingStaticFile[] = []; @@ -113,9 +123,6 @@ if (import.meta.hot) import.meta.hot.accept();`; const json = JSON.parse(manifest.source) as Manifest; for (const item of Object.values(json)) { - if (item.isEntry) { - serverEntryFilename = item.file; - } if (item.assets) { for (let i = 0; i < item.assets.length; i++) { From 174000e7657503133aa2e9b3caed3b43bcb6d6d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Sun, 29 Mar 2026 20:37:08 +0200 Subject: [PATCH 2/2] fmt: format server_entry.ts Co-Authored-By: Claude Opus 4.6 (1M context) --- packages/plugin-vite/src/plugins/server_entry.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/plugin-vite/src/plugins/server_entry.ts b/packages/plugin-vite/src/plugins/server_entry.ts index 629f91f91dc..200c4ee28d7 100644 --- a/packages/plugin-vite/src/plugins/server_entry.ts +++ b/packages/plugin-vite/src/plugins/server_entry.ts @@ -123,7 +123,6 @@ if (import.meta.hot) import.meta.hot.accept();`; const json = JSON.parse(manifest.source) as Manifest; for (const item of Object.values(json)) { - if (item.assets) { for (let i = 0; i < item.assets.length; i++) { const id = item.assets[i];