From 3d7c38f2d2a2cdfce1d00c724a04e57dd465f23d Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sun, 20 Jul 2025 16:27:40 +0000 Subject: [PATCH] fix(dev): use `get-port-please` once more This reverts commit d2c200eeb42ece53097605eac1c10f272929d300. --- packages/nuxi/package.json | 1 + packages/nuxi/src/commands/dev.ts | 5 ++-- packages/nuxi/src/dev/socket.ts | 41 ++++++------------------------- packages/nuxi/src/dev/utils.ts | 8 ++++-- packages/nuxt-cli/package.json | 2 +- pnpm-lock.yaml | 9 ++++--- 6 files changed, 24 insertions(+), 42 deletions(-) diff --git a/packages/nuxi/package.json b/packages/nuxi/package.json index c537d48d0..20fe12327 100644 --- a/packages/nuxi/package.json +++ b/packages/nuxi/package.json @@ -52,6 +52,7 @@ "defu": "^6.1.4", "exsolve": "^1.0.7", "fuse.js": "^7.1.0", + "get-port-please": "^3.2.0", "giget": "^2.0.0", "h3": "^1.15.3", "httpxy": "^0.1.7", diff --git a/packages/nuxi/src/commands/dev.ts b/packages/nuxi/src/commands/dev.ts index 82bade3ce..19b8c7a0c 100644 --- a/packages/nuxi/src/commands/dev.ts +++ b/packages/nuxi/src/commands/dev.ts @@ -10,12 +10,13 @@ import { fork } from 'node:child_process' import process from 'node:process' import { defineCommand } from 'citty' +import { isSocketSupported } from 'get-port-please' import { createProxyServer } from 'httpxy' import { listen } from 'listhen' import { getArgs as getListhenArgs, parseArgs as parseListhenArgs } from 'listhen/cli' import { resolve } from 'pathe' import { satisfies } from 'semver' -import { isBun, isTest, provider } from 'std-env' +import { isBun, isTest } from 'std-env' import { initialize } from '../dev' import { renderError } from '../dev/error' @@ -135,7 +136,7 @@ const command = defineCommand({ const nuxtSocketEnv = process.env.NUXT_SOCKET ? process.env.NUXT_SOCKET === '1' : undefined - const useSocket = nuxtSocketEnv ?? (nuxtOptions._majorVersion === 4 && provider !== 'stackblitz') + const useSocket = nuxtSocketEnv ?? (nuxtOptions._majorVersion === 4 && await isSocketSupported()) const urls = await devProxy.listener.getURLs() // run initially in in no-fork mode diff --git a/packages/nuxi/src/dev/socket.ts b/packages/nuxi/src/dev/socket.ts index f1ee0bea8..0e333d77d 100644 --- a/packages/nuxi/src/dev/socket.ts +++ b/packages/nuxi/src/dev/socket.ts @@ -1,23 +1,9 @@ import type { RequestListener } from 'node:http' import type { AddressInfo } from 'node:net' -import { existsSync, unlinkSync } from 'node:fs' import { Server } from 'node:http' -import os from 'node:os' import process from 'node:process' -import { join } from 'pathe' -function generateSocketPath(prefix: string): string { - const timestamp = Date.now() - const random = Math.random().toString(36).slice(2, 8) - - if (process.platform === 'win32') { - // Windows named pipes - return `\\\\.\\pipe\\${prefix}-${timestamp}-${random}` - } - - // Unix domain sockets - return join(os.tmpdir(), `${prefix}-${timestamp}-${random}.sock`) -} +import { cleanSocket, getSocketAddress } from 'get-port-please' export function formatSocketURL(socketPath: string, ssl = false): string { const protocol = ssl ? 'https' : 'http' @@ -45,17 +31,12 @@ export function parseSocketURL(url: string): { socketPath: string, protocol: 'ht } export async function createSocketListener(handler: RequestListener, proxyAddress?: AddressInfo) { - const socketPath = generateSocketPath('nuxt-dev') + const socketPath = getSocketAddress({ + name: 'nuxt-dev', + random: true, + }) const server = new Server(handler) - - if (process.platform !== 'win32' && existsSync(socketPath)) { - try { - unlinkSync(socketPath) - } - catch { - // suppress errors if the socket file cannot be removed - } - } + await cleanSocket(socketPath) await new Promise(resolve => server.listen({ path: socketPath }, resolve)) const url = formatSocketURL(socketPath) return { @@ -67,15 +48,7 @@ export async function createSocketListener(handler: RequestListener, proxyAddres await new Promise((resolve, reject) => server.close(err => err ? reject(err) : resolve())) } finally { - // Clean up socket file on Unix systems - if (process.platform !== 'win32') { - try { - unlinkSync(socketPath) - } - catch { - // suppress errors - } - } + await cleanSocket(socketPath) } }, getURLs: async () => [{ url, type: 'network' as const }], diff --git a/packages/nuxi/src/dev/utils.ts b/packages/nuxi/src/dev/utils.ts index 46c7c27f5..69f830228 100644 --- a/packages/nuxi/src/dev/utils.ts +++ b/packages/nuxi/src/dev/utils.ts @@ -25,7 +25,7 @@ import { loadKit } from '../utils/kit' import { loadNuxtManifest, resolveNuxtManifest, writeNuxtManifest } from '../utils/nuxt' import { renderError } from './error' -import { formatSocketURL } from './socket' +import { formatSocketURL, isSocketURL } from './socket' export type NuxtParentIPCMessage = | { type: 'nuxt:internal:dev:context', context: NuxtDevContext, socket?: boolean } @@ -351,7 +351,11 @@ export function resolveDevServerDefaults(listenOptions: Partial = {} if (urls) { - defaultConfig.vite = { server: { allowedHosts: urls.map(u => new URL(u).hostname) } } + defaultConfig.vite = { + server: { + allowedHosts: urls.filter(u => !isSocketURL(u)).map(u => new URL(u).hostname), + }, + } } // defined hostname diff --git a/packages/nuxt-cli/package.json b/packages/nuxt-cli/package.json index 40c3deeec..1e08b61dc 100644 --- a/packages/nuxt-cli/package.json +++ b/packages/nuxt-cli/package.json @@ -41,6 +41,7 @@ "defu": "^6.1.4", "exsolve": "^1.0.7", "fuse.js": "^7.1.0", + "get-port-please": "^3.2.0", "giget": "^2.0.0", "h3": "^1.15.3", "httpxy": "^0.1.7", @@ -63,7 +64,6 @@ "@nuxt/kit": "^4.0.0", "@nuxt/schema": "^4.0.0", "@types/node": "^22.16.3", - "get-port-please": "^3.2.0", "rollup": "^4.45.0", "rollup-plugin-visualizer": "^6.0.3", "typescript": "^5.8.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b91257bea..81e1fa2f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -140,6 +140,9 @@ importers: fuse.js: specifier: ^7.1.0 version: 7.1.0 + get-port-please: + specifier: ^3.2.0 + version: 3.2.0 giget: specifier: ^2.0.0 version: 2.0.0 @@ -242,6 +245,9 @@ importers: fuse.js: specifier: ^7.1.0 version: 7.1.0 + get-port-please: + specifier: ^3.2.0 + version: 3.2.0 giget: specifier: ^2.0.0 version: 2.0.0 @@ -303,9 +309,6 @@ importers: '@types/node': specifier: ^22.16.3 version: 22.16.3 - get-port-please: - specifier: ^3.2.0 - version: 3.2.0 rollup: specifier: ^4.45.0 version: 4.45.0