From 848ac42e8a904fccd72440a29967d27379bb2524 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sun, 2 Mar 2025 23:07:58 +0000 Subject: [PATCH 1/3] fix(dev): automatically add tunnel hostnames to vite allowedHosts --- packages/nuxi/src/commands/dev-child.ts | 2 +- packages/nuxi/src/commands/dev.ts | 1 + packages/nuxi/src/utils/dev.ts | 21 +++++++++++++++------ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/packages/nuxi/src/commands/dev-child.ts b/packages/nuxi/src/commands/dev-child.ts index 70d967815..ea333ae43 100644 --- a/packages/nuxi/src/commands/dev-child.ts +++ b/packages/nuxi/src/commands/dev-child.ts @@ -60,7 +60,7 @@ export default defineCommand({ hostname: devContext.hostname, public: devContext.public, https: devContext.proxy?.https, - })) + }, devContext.publicURLs)) // Init Nuxt dev const nuxtDev = await createNuxtDevServer({ diff --git a/packages/nuxi/src/commands/dev.ts b/packages/nuxi/src/commands/dev.ts index a66106b4c..8ef82f75c 100644 --- a/packages/nuxi/src/commands/dev.ts +++ b/packages/nuxi/src/commands/dev.ts @@ -193,6 +193,7 @@ async function _startSubprocess(devProxy: DevProxy, rawArgs: string[], listenArg __NUXT_DEV__: JSON.stringify({ hostname: listenArgs.hostname, public: listenArgs.public, + publicURLs: await devProxy.listener.getURLs().then(r => r.map(r => r.url)), proxy: { url: devProxy.listener.url, urls: await devProxy.listener.getURLs(), diff --git a/packages/nuxi/src/utils/dev.ts b/packages/nuxi/src/utils/dev.ts index 8f56faa88..4214bee03 100644 --- a/packages/nuxi/src/utils/dev.ts +++ b/packages/nuxi/src/utils/dev.ts @@ -9,6 +9,7 @@ import EventEmitter from 'node:events' import process from 'node:process' import chokidar from 'chokidar' +import { defu } from 'defu' import { toNodeListener } from 'h3' import { createJiti } from 'jiti' import { listen } from 'listhen' @@ -30,6 +31,7 @@ export type NuxtDevIPCMessage = export interface NuxtDevContext { public?: boolean hostname?: string + publicURLs?: string[] proxy?: { url?: string urls?: ListenURL[] @@ -177,6 +179,8 @@ class NuxtDevServer extends EventEmitter { } const kit = await loadKit(this.options.cwd) + + this.options.overrides = defu(this.options.overrides, _getDevServerOverrides({}, await this.listener.getURLs().then(r => r.map(r => r.url)))) this._currentNuxt = await kit.loadNuxt({ cwd: this.options.cwd, dev: true, @@ -184,15 +188,16 @@ class NuxtDevServer extends EventEmitter { envName: this.options.envName, overrides: { logLevel: this.options.logLevel as 'silent' | 'info' | 'verbose', - vite: { - clearScreen: this.options.clear, - }, nitro: { devErrorHandler: (error, event) => { this._renderError(event.node.res, error) }, }, ...this.options.overrides, + vite: { + clearScreen: this.options.clear, + ...this.options.overrides.vite, + }, }, }) @@ -341,14 +346,18 @@ function _getAddressURL(addr: AddressInfo, https: boolean) { return `${proto}://${host}:${port}/` } -export function _getDevServerOverrides(listenOptions: Partial>) { +export function _getDevServerOverrides(listenOptions: Partial>, urls: string[] = []) { const defaultOverrides: Partial = {} + if (urls) { + defaultOverrides.vite = { server: { allowedHosts: urls.map(u => new URL(u).hostname) } } + } + // defined hostname if (listenOptions.hostname) { const protocol = listenOptions.https ? 'https' : 'http' - defaultOverrides.devServer = { cors: { origin: [`${protocol}://${listenOptions.hostname}`] } } - defaultOverrides.vite = { server: { allowedHosts: [listenOptions.hostname] } } + defaultOverrides.devServer = { cors: { origin: [`${protocol}://${listenOptions.hostname}`, ...urls] } } + defaultOverrides.vite = { server: { allowedHosts: [listenOptions.hostname, ...urls.map(u => new URL(u).hostname)] } } } if (listenOptions.public) { From 78f1e8c787bf5b09b19cbbcf3c95e947e9b05e5f Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sun, 2 Mar 2025 23:15:45 +0000 Subject: [PATCH 2/3] chore: simplify --- packages/nuxi/src/utils/dev.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxi/src/utils/dev.ts b/packages/nuxi/src/utils/dev.ts index 4214bee03..7daf57200 100644 --- a/packages/nuxi/src/utils/dev.ts +++ b/packages/nuxi/src/utils/dev.ts @@ -357,7 +357,7 @@ export function _getDevServerOverrides(listenOptions: Partial new URL(u).hostname)] } } + defaultOverrides.vite = defu(defaultOverrides.vite, { server: { allowedHosts: [listenOptions.hostname] } }) } if (listenOptions.public) { From ec36e0348993c7a58401eb78927a8c48968f57b6 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sun, 2 Mar 2025 23:16:12 +0000 Subject: [PATCH 3/3] chore: revert defu --- packages/nuxi/src/utils/dev.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxi/src/utils/dev.ts b/packages/nuxi/src/utils/dev.ts index 7daf57200..581fc1ee8 100644 --- a/packages/nuxi/src/utils/dev.ts +++ b/packages/nuxi/src/utils/dev.ts @@ -9,7 +9,7 @@ import EventEmitter from 'node:events' import process from 'node:process' import chokidar from 'chokidar' -import { defu } from 'defu' +import defu from 'defu' import { toNodeListener } from 'h3' import { createJiti } from 'jiti' import { listen } from 'listhen'