From 93b69e60920b053b96560ce7e335a73a5bd858fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A1=B9=E6=B5=B7?= Date: Mon, 13 Jan 2025 19:17:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20server=20port=20first?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/bundler-webpack/src/server/server.ts | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/packages/bundler-webpack/src/server/server.ts b/packages/bundler-webpack/src/server/server.ts index 42be546fa70f..71b1453a56ef 100644 --- a/packages/bundler-webpack/src/server/server.ts +++ b/packages/bundler-webpack/src/server/server.ts @@ -240,31 +240,42 @@ export async function createServer(opts: IOpts): Promise { const parseSocketServerAddress = async () => { if (!process.env.SOCKET_SERVER) return basePort; - const {port} = new URL(process.env.SOCKET_SERVER); + const { port } = new URL(process.env.SOCKET_SERVER); const startPort = Number(port) || basePort; - const hmrPort = await portfinder.getPortPromise({ port: startPort }) - if (port && startPort !== hmrPort) { - console.log(`[SOCKET_SERVER] hmr port changed from ${port} to ${basePort}`) + try { + const hmrPort = await portfinder.getPortPromise({ + port: startPort, + stopPort: startPort + 1, + }); + if (port && startPort !== hmrPort) { + console.log( + `[SOCKET_SERVER] hmr port changed from ${port} to ${basePort}`, + ); + return undefined; + } + return startPort === basePort ? undefined : startPort; + } catch (e) { + console.log(`[SOCKET_SERVER] hmr port not found, use ${basePort}`); return undefined; } - return startPort === basePort ? undefined : startPort; }; - ws = createWebSocketServer(server, await parseSocketServerAddress()); - - ws.wss.on('connection', (socket) => { - if (stats) { - sendStats(getStats(stats), false, socket); - } - }); + const hmrPort = await parseSocketServerAddress(); server.listen(basePort, () => { const banner = getDevBanner(protocol, opts.host, basePort); - console.log(banner.before); logger.ready(banner.main); console.log(banner.after); }); + ws = createWebSocketServer(server, hmrPort); + + ws.wss.on('connection', (socket) => { + if (stats) { + sendStats(getStats(stats), false, socket); + } + }); + return server; }