diff --git a/packages/nuxi/package.json b/packages/nuxi/package.json index 18ec9c7a1..2143bca01 100644 --- a/packages/nuxi/package.json +++ b/packages/nuxi/package.json @@ -52,7 +52,6 @@ "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 efc2106fd..5d5445b5d 100644 --- a/packages/nuxi/src/commands/dev.ts +++ b/packages/nuxi/src/commands/dev.ts @@ -10,13 +10,12 @@ 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 } from 'std-env' +import { isBun, isTest, provider } from 'std-env' import { initialize } from '../dev' import { renderError } from '../dev/error' @@ -136,7 +135,7 @@ const command = defineCommand({ const nuxtSocketEnv = process.env.NUXT_SOCKET ? process.env.NUXT_SOCKET === '1' : undefined - const useSocket = nuxtSocketEnv ?? (nuxtOptions._majorVersion === 4 && await isSocketSupported()) + const useSocket = nuxtSocketEnv ?? (nuxtOptions._majorVersion === 4 && provider !== 'stackblitz') 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 9b151f0f7..400a4bc04 100644 --- a/packages/nuxi/src/dev/socket.ts +++ b/packages/nuxi/src/dev/socket.ts @@ -1,8 +1,22 @@ import type { RequestListener } from 'node:http' +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' -import { cleanSocket, getSocketAddress } from 'get-port-please' +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`) +} export function formatSocketURL(socketPath: string, ssl = false): string { const protocol = ssl ? 'https' : 'http' @@ -30,12 +44,17 @@ export function parseSocketURL(url: string): { socketPath: string, protocol: 'ht } export async function createSocketListener(handler: RequestListener, ssl = false) { - const socketPath = getSocketAddress({ - name: 'nuxt-dev', - random: true, - }) + const socketPath = generateSocketPath('nuxt-dev') const server = new Server(handler) - await cleanSocket(socketPath) + + if (process.platform !== 'win32' && existsSync(socketPath)) { + try { + unlinkSync(socketPath) + } + catch { + // suppress errors if the socket file cannot be removed + } + } await new Promise(resolve => server.listen({ path: socketPath }, resolve)) const url = formatSocketURL(socketPath, ssl) return { @@ -51,7 +70,15 @@ export async function createSocketListener(handler: RequestListener, ssl = false await new Promise((resolve, reject) => server.close(err => err ? reject(err) : resolve())) } finally { - await cleanSocket(socketPath) + // Clean up socket file on Unix systems + if (process.platform !== 'win32') { + try { + unlinkSync(socketPath) + } + catch { + // suppress errors + } + } } }, getURLs: async () => [{ url, type: 'network' as const }], diff --git a/packages/nuxt-cli/package.json b/packages/nuxt-cli/package.json index b0956daf8..eb303dc8e 100644 --- a/packages/nuxt-cli/package.json +++ b/packages/nuxt-cli/package.json @@ -41,7 +41,6 @@ "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,6 +62,7 @@ "devDependencies": { "@nuxt/schema": "^3.17.7", "@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 ab171144b..d407c24d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -139,9 +139,6 @@ 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 @@ -244,9 +241,6 @@ 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 @@ -305,6 +299,9 @@ 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