From e10c6bdc757836781a9285ad2a6a3611bb9d6855 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0=20/=20green?= Date: Tue, 28 Mar 2023 17:24:57 +0900 Subject: [PATCH] fix: call `buildStart` only once when using next port (#12624) --- packages/vite/src/node/server/index.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 463ee712cbbc0d..9fe551feb360e4 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -669,12 +669,28 @@ export async function createServer( depsOptimizer.server = server } + // httpServer.listen can be called multiple times + // when port when using next port number + // this code is to avoid calling buildStart multiple times + let initingServer: Promise | undefined + let serverInited = false + const initServer = async () => { + if (serverInited) return + if (initingServer) return initingServer + + initingServer = (async function () { + await container.buildStart({}) + initingServer = undefined + serverInited = true + })() + } + if (!middlewareMode && httpServer) { // overwrite listen to init optimizer before server start const listen = httpServer.listen.bind(httpServer) httpServer.listen = (async (port: number, ...args: any[]) => { try { - await container.buildStart({}) + await initServer() } catch (e) { httpServer.emit('error', e) return @@ -682,7 +698,7 @@ export async function createServer( return listen(port, ...args) }) as any } else { - await container.buildStart({}) + await initServer() } return server