diff --git a/packages/vite/src/client.ts b/packages/vite/src/client.ts index 751844e53ee..beb13de0c30 100644 --- a/packages/vite/src/client.ts +++ b/packages/vite/src/client.ts @@ -2,11 +2,12 @@ import { join, resolve } from 'pathe' import * as vite from 'vite' import vuePlugin from '@vitejs/plugin-vue' import viteJsxPlugin from '@vitejs/plugin-vue-jsx' -import type { Connect } from 'vite' +import type { Connect, HmrOptions } from 'vite' import { logger } from '@nuxt/kit' import { getPort } from 'get-port-please' import { joinURL, withLeadingSlash, withoutLeadingSlash, withTrailingSlash } from 'ufo' import escapeRE from 'escape-string-regexp' +import defu from 'defu' import { cacheDirPlugin } from './plugins/cache-dir' import { analyzePlugin } from './plugins/analyze' import { wpfs } from './utils/wpfs' @@ -16,11 +17,6 @@ import { devStyleSSRPlugin } from './plugins/dev-ssr-css' import { viteNodePlugin } from './vite-node' export async function buildClient (ctx: ViteBuildContext) { - const hmrPortDefault = 24678 // Vite's default HMR port - const hmrPort = await getPort({ - port: hmrPortDefault, - ports: Array.from({ length: 20 }, (_, i) => hmrPortDefault + 1 + i) - }) const clientConfig: vite.InlineConfig = vite.mergeConfig(ctx.config, { experimental: { renderBuiltUrl: (filename, { type, hostType }) => { @@ -66,12 +62,6 @@ export async function buildClient (ctx: ViteBuildContext) { ], appType: 'custom', server: { - hmr: { - // https://github.com/nuxt/framework/issues/4191 - protocol: 'ws', - clientPort: hmrPort, - port: hmrPort - }, middlewareMode: true } } as ViteOptions) @@ -82,6 +72,19 @@ export async function buildClient (ctx: ViteBuildContext) { clientConfig.server.hmr = false } + if (clientConfig.server.hmr !== false) { + const hmrPortDefault = 24678 // Vite's default HMR port + const hmrPort = await getPort({ + port: hmrPortDefault, + ports: Array.from({ length: 20 }, (_, i) => hmrPortDefault + 1 + i) + }) + clientConfig.server.hmr = defu(clientConfig.server.hmr as HmrOptions, { + // https://github.com/nuxt/framework/issues/4191 + protocol: 'ws', + port: hmrPort + }) + } + // Add analyze plugin if needed if (ctx.nuxt.options.build.analyze) { clientConfig.plugins.push(...analyzePlugin(ctx)) diff --git a/packages/vite/src/server.ts b/packages/vite/src/server.ts index aa6857f937c..ea0c1ce5bc0 100644 --- a/packages/vite/src/server.ts +++ b/packages/vite/src/server.ts @@ -96,7 +96,8 @@ export async function buildServer (ctx: ViteBuildContext) { }, server: { // https://github.com/vitest-dev/vitest/issues/229#issuecomment-1002685027 - preTransformRequests: false + preTransformRequests: false, + hmr: false }, plugins: [ cacheDirPlugin(ctx.nuxt.options.rootDir, 'server'),