Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/nuxi/src/commands/dev-child.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand Down
1 change: 1 addition & 0 deletions packages/nuxi/src/commands/dev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
Expand Down
21 changes: 15 additions & 6 deletions packages/nuxi/src/utils/dev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -30,6 +31,7 @@ export type NuxtDevIPCMessage =
export interface NuxtDevContext {
public?: boolean
hostname?: string
publicURLs?: string[]
proxy?: {
url?: string
urls?: ListenURL[]
Expand Down Expand Up @@ -177,22 +179,25 @@ 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,
ready: false,
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,
},
},
})

Expand Down Expand Up @@ -341,14 +346,18 @@ function _getAddressURL(addr: AddressInfo, https: boolean) {
return `${proto}://${host}:${port}/`
}

export function _getDevServerOverrides(listenOptions: Partial<Pick<ListenOptions, 'hostname' | 'public' | 'https'>>) {
export function _getDevServerOverrides(listenOptions: Partial<Pick<ListenOptions, 'hostname' | 'public' | 'https'>>, urls: string[] = []) {
const defaultOverrides: Partial<NuxtConfig> = {}

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 = defu(defaultOverrides.vite, { server: { allowedHosts: [listenOptions.hostname] } })
}

if (listenOptions.public) {
Expand Down