diff --git a/packages/vite/src/node/server/hmr.ts b/packages/vite/src/node/server/hmr.ts index 357a2832557806..b38cfa71de9082 100644 --- a/packages/vite/src/node/server/hmr.ts +++ b/packages/vite/src/node/server/hmr.ts @@ -4,10 +4,9 @@ import type { Server } from 'node:http' import colors from 'picocolors' import type { Update } from 'types/hmrPayload' import type { RollupError } from 'rollup' -import { CLIENT_DIR, DEFAULT_DEV_PORT } from '../constants' +import { CLIENT_DIR } from '../constants' import { createDebugger, - diffDnsOrderChange, normalizePath, unique, withTrailingSlash, @@ -19,6 +18,7 @@ import { getAffectedGlobModules } from '../plugins/importMetaGlob' import { isExplicitImportRequired } from '../plugins/importAnalysis' import { getEnvFilesForMode } from '../env' import type { ModuleNode } from './moduleGraph' +import { restartServerWithUrls } from '.' export const debugHmr = createDebugger('vite:hmr') @@ -78,22 +78,7 @@ export async function handleHMRUpdate( { clear: true, timestamp: true }, ) try { - const { port: prevPort, host: prevHost, middlewareMode } = config.server - const oldUrls = server.resolvedUrls - await server.restart() - const { - logger, - server: { port, host }, - } = server.config - if ( - !middlewareMode && - ((port ?? DEFAULT_DEV_PORT) !== (prevPort ?? DEFAULT_DEV_PORT) || - host !== prevHost || - diffDnsOrderChange(oldUrls, server.resolvedUrls)) - ) { - logger.info('') - server.printUrls() - } + await restartServerWithUrls(server) } catch (e) { config.logger.error(colors.red(e)) } diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index a4b12150b4d195..20dfdad6be6363 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -24,6 +24,7 @@ import { import type { InlineConfig, ResolvedConfig } from '../config' import { isDepsOptimizerEnabled, resolveConfig } from '../config' import { + diffDnsOrderChange, isInNodeModules, isParentDirectory, mergeConfig, @@ -906,3 +907,33 @@ async function restartServer(server: ViteDevServer) { bindCLIShortcuts(newServer, shortcutsOptions) } } + +/** + * Internal function to restart the Vite server and print URLs if changed + */ +export async function restartServerWithUrls( + server: ViteDevServer, +): Promise { + if (server.config.server.middlewareMode) { + await server.restart() + return + } + + const { port: prevPort, host: prevHost } = server.config.server + const prevUrls = server.resolvedUrls + + await server.restart() + + const { + logger, + server: { port, host }, + } = server.config + if ( + (port ?? DEFAULT_DEV_PORT) !== (prevPort ?? DEFAULT_DEV_PORT) || + host !== prevHost || + diffDnsOrderChange(prevUrls, server.resolvedUrls) + ) { + logger.info('') + server.printUrls() + } +} diff --git a/packages/vite/src/node/shortcuts.ts b/packages/vite/src/node/shortcuts.ts index 2c604fecfe4550..162a71c45f2ec8 100644 --- a/packages/vite/src/node/shortcuts.ts +++ b/packages/vite/src/node/shortcuts.ts @@ -1,6 +1,6 @@ import readline from 'node:readline' import colors from 'picocolors' -import type { ViteDevServer } from './server' +import { type ViteDevServer, restartServerWithUrls } from './server' import { isDefined } from './utils' import type { PreviewServer } from './preview' import { openBrowser } from './server/openBrowser' @@ -91,7 +91,7 @@ const BASE_DEV_SHORTCUTS: CLIShortcut[] = [ key: 'r', description: 'restart the server', async action(server) { - await server.restart() + await restartServerWithUrls(server) }, }, {