38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
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<string, string> = {};
|
|
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),
|
|
};
|
|
}
|