import { existsSync, readFileSync } from 'node:fs'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..'); /** 本地 dev 默认端口;3000 在部分 Windows(Hyper-V 保留 2960–3059)上会 EACCES */ const DEFAULT_DEV_API_PORT = '3100'; /** 与 apps/api/.env 的 PORT 对齐 */ export function resolveApiDevPort() { if (process.env.PORT) return String(process.env.PORT); let port = DEFAULT_DEV_API_PORT; const envPath = resolve(repoRoot, 'apps/api/.env'); if (existsSync(envPath)) { const match = readFileSync(envPath, 'utf8').match(/^PORT=(\d+)\s*$/m); if (match) port = match[1]; } return port; } /** 供 player/admin Vite 代理使用 */ export function resolveApiDevTarget() { if (process.env.VITE_DEV_API_TARGET) return process.env.VITE_DEV_API_TARGET; if (process.env.API_DEV_TARGET) return process.env.API_DEV_TARGET; return `http://localhost:${resolveApiDevPort()}`; }