diff --git a/packages/plugin-vite/src/plugins/server_entry.ts b/packages/plugin-vite/src/plugins/server_entry.ts index 4277da7fd82..200c4ee28d7 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,10 +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++) { const id = item.assets[i];