From 639907e0ecbb528fd6b3d8bd5618f7bf1fa64cc9 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sat, 23 Jul 2022 11:05:02 +0100 Subject: [PATCH 1/4] fix(vite): move hmr settings to defaults, not overrides --- packages/vite/src/client.ts | 18 ------------------ packages/vite/src/server.ts | 1 + packages/vite/src/vite.ts | 13 +++++++++++++ 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/packages/vite/src/client.ts b/packages/vite/src/client.ts index 751844e53ee..a0e32746ecd 100644 --- a/packages/vite/src/client.ts +++ b/packages/vite/src/client.ts @@ -4,7 +4,6 @@ import vuePlugin from '@vitejs/plugin-vue' import viteJsxPlugin from '@vitejs/plugin-vue-jsx' import type { Connect } 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 { cacheDirPlugin } from './plugins/cache-dir' @@ -16,11 +15,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,22 +60,10 @@ 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) - // In build mode we explicitly override any vite options that vite is relying on - // to detect whether to inject production or development code (such as HMR code) - if (!ctx.nuxt.options.dev) { - clientConfig.server.hmr = false - } - // 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..ff6add5d36b 100644 --- a/packages/vite/src/server.ts +++ b/packages/vite/src/server.ts @@ -95,6 +95,7 @@ export async function buildServer (ctx: ViteBuildContext) { } }, server: { + hmr: false, // https://github.com/vitest-dev/vitest/issues/229#issuecomment-1002685027 preTransformRequests: false }, diff --git a/packages/vite/src/vite.ts b/packages/vite/src/vite.ts index 28cc05527ed..7ac8649ad7b 100644 --- a/packages/vite/src/vite.ts +++ b/packages/vite/src/vite.ts @@ -6,6 +6,7 @@ import { logger, isIgnored } from '@nuxt/kit' import type { Options } from '@vitejs/plugin-vue' import replace from '@rollup/plugin-replace' import { sanitizeFilePath } from 'mlly' +import { getPort } from 'get-port-please' import { buildClient } from './client' import { buildServer } from './server' import virtual from './plugins/virtual' @@ -26,6 +27,11 @@ export interface ViteBuildContext { } export async function bundle (nuxt: Nuxt) { + const hmrPortDefault = 24678 // Vite's default HMR port + const hmrPort = await getPort({ + port: hmrPortDefault, + ports: Array.from({ length: 20 }, (_, i) => hmrPortDefault + 1 + i) + }) const ctx: ViteBuildContext = { nuxt, config: vite.mergeConfig( @@ -72,6 +78,12 @@ export async function bundle (nuxt: Nuxt) { reactivityTransform: nuxt.options.experimental.reactivityTransform }, server: { + hmr: { + // https://github.com/nuxt/framework/issues/4191 + protocol: 'ws', + clientPort: hmrPort, + port: hmrPort + }, watch: { ignored: isIgnored }, fs: { allow: [ @@ -88,6 +100,7 @@ export async function bundle (nuxt: Nuxt) { // to detect whether to inject production or development code (such as HMR code) if (!nuxt.options.dev) { ctx.config.server.watch = undefined + ctx.config.server.hmr = false ctx.config.build.watch = undefined } From b0278ef39f3dfb142f7175925cc0c0279a06b39d Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Mon, 25 Jul 2022 12:48:37 +0100 Subject: [PATCH 2/4] refactor: move hmr port override back into client config file --- packages/vite/src/client.ts | 22 ++++++++++++++++++++++ packages/vite/src/server.ts | 1 - packages/vite/src/vite.ts | 13 ------------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/packages/vite/src/client.ts b/packages/vite/src/client.ts index a0e32746ecd..84ec262faf9 100644 --- a/packages/vite/src/client.ts +++ b/packages/vite/src/client.ts @@ -4,8 +4,10 @@ import vuePlugin from '@vitejs/plugin-vue' import viteJsxPlugin from '@vitejs/plugin-vue-jsx' import type { Connect } 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' @@ -64,6 +66,26 @@ export async function buildClient (ctx: ViteBuildContext) { } } as ViteOptions) + // In build mode we explicitly override any vite options that vite is relying on + // to detect whether to inject production or development code (such as HMR code) + if (!ctx.nuxt.options.dev) { + 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) + }) + const userHMRConfig = clientConfig.server.hmr === true ? {} : clientConfig.server.hmr + clientConfig.server.hmr = defu(userHMRConfig, { + // 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 ff6add5d36b..aa6857f937c 100644 --- a/packages/vite/src/server.ts +++ b/packages/vite/src/server.ts @@ -95,7 +95,6 @@ export async function buildServer (ctx: ViteBuildContext) { } }, server: { - hmr: false, // https://github.com/vitest-dev/vitest/issues/229#issuecomment-1002685027 preTransformRequests: false }, diff --git a/packages/vite/src/vite.ts b/packages/vite/src/vite.ts index 7ac8649ad7b..28cc05527ed 100644 --- a/packages/vite/src/vite.ts +++ b/packages/vite/src/vite.ts @@ -6,7 +6,6 @@ import { logger, isIgnored } from '@nuxt/kit' import type { Options } from '@vitejs/plugin-vue' import replace from '@rollup/plugin-replace' import { sanitizeFilePath } from 'mlly' -import { getPort } from 'get-port-please' import { buildClient } from './client' import { buildServer } from './server' import virtual from './plugins/virtual' @@ -27,11 +26,6 @@ export interface ViteBuildContext { } export async function bundle (nuxt: Nuxt) { - const hmrPortDefault = 24678 // Vite's default HMR port - const hmrPort = await getPort({ - port: hmrPortDefault, - ports: Array.from({ length: 20 }, (_, i) => hmrPortDefault + 1 + i) - }) const ctx: ViteBuildContext = { nuxt, config: vite.mergeConfig( @@ -78,12 +72,6 @@ export async function bundle (nuxt: Nuxt) { reactivityTransform: nuxt.options.experimental.reactivityTransform }, server: { - hmr: { - // https://github.com/nuxt/framework/issues/4191 - protocol: 'ws', - clientPort: hmrPort, - port: hmrPort - }, watch: { ignored: isIgnored }, fs: { allow: [ @@ -100,7 +88,6 @@ export async function bundle (nuxt: Nuxt) { // to detect whether to inject production or development code (such as HMR code) if (!nuxt.options.dev) { ctx.config.server.watch = undefined - ctx.config.server.hmr = false ctx.config.build.watch = undefined } From a453e0b22821c502cd3c79144223ebe816f4801e Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Mon, 25 Jul 2022 14:18:32 +0200 Subject: [PATCH 3/4] cast ts type --- packages/vite/src/client.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/client.ts b/packages/vite/src/client.ts index 84ec262faf9..beb13de0c30 100644 --- a/packages/vite/src/client.ts +++ b/packages/vite/src/client.ts @@ -2,7 +2,7 @@ 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' @@ -78,8 +78,7 @@ export async function buildClient (ctx: ViteBuildContext) { port: hmrPortDefault, ports: Array.from({ length: 20 }, (_, i) => hmrPortDefault + 1 + i) }) - const userHMRConfig = clientConfig.server.hmr === true ? {} : clientConfig.server.hmr - clientConfig.server.hmr = defu(userHMRConfig, { + clientConfig.server.hmr = defu(clientConfig.server.hmr as HmrOptions, { // https://github.com/nuxt/framework/issues/4191 protocol: 'ws', port: hmrPort From b64868e3b84749a8a453aa15ce4bb86d546d8735 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Mon, 25 Jul 2022 14:20:22 +0200 Subject: [PATCH 4/4] explicitly disable hmr for vite-server --- packages/vite/src/server.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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'),