import fs from 'node:fs'; import path from 'node:path'; export const DEFAULT_API_PORT = 8788; export const DEFAULT_CDP_PORT = 9333; export const DEFAULT_CONTROL_PORT = 8797; export interface EnvPorts { apiPort: number; cdpPort: number; controlPort: number; } /** 从项目根目录 .env 读取端口配置(与 Python 后端一致),环境变量优先。 */ export function readPorts(rootDir: string): EnvPorts { const values: Record = {}; const envPath = path.join(rootDir, '.env'); if (fs.existsSync(envPath)) { for (const line of fs.readFileSync(envPath, 'utf8').split(/\r?\n/)) { const trimmed = line.trim(); if (!trimmed || trimmed.startsWith('#')) continue; const eq = trimmed.indexOf('='); if (eq <= 0) continue; values[trimmed.slice(0, eq).trim()] = trimmed.slice(eq + 1).trim(); } } const pick = (key: string, fallback: number): number => { const raw = process.env[key] ?? values[key]; const parsed = raw ? parseInt(raw, 10) : NaN; return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; }; return { apiPort: pick('API_PORT', DEFAULT_API_PORT), cdpPort: pick('CDP_PORT', DEFAULT_CDP_PORT), controlPort: pick('ELECTRON_CTRL_PORT', DEFAULT_CONTROL_PORT), }; }