修复桌面壳开发端口对齐

桌面壳 dev 命令显式锁定 Vite 3000 端口

dev 端口解析支持严格端口模式并避免显式端口被 Linux 端口段改写

补充端口错配回归测试和宿主壳文档记忆
This commit is contained in:
2026-06-21 21:57:00 +08:00
parent 768546fdc7
commit 15623a9eff
9 changed files with 93 additions and 8 deletions
+14
View File
@@ -479,6 +479,7 @@ export async function findAvailablePort({
reservedPorts = new Set(),
maxAttempts = null,
portRange = null,
strict = false,
}) {
const range = normalizePortRange(portRange);
const startPort = normalizePort(preferredPort, 0);
@@ -501,6 +502,18 @@ export async function findAvailablePort({
throw new Error(`端口 ${startPort} 不在允许端口段 ${range.label} 内`);
}
if (strict && startPort !== 0) {
if (reservedPorts.has(startPort)) {
throw new Error(`端口 ${host}:${startPort} 已被当前 dev 启动流程占用,无法严格使用该端口`);
}
if (await isPortAvailable({host, port: startPort})) {
return startPort;
}
throw new Error(`端口 ${host}:${startPort} 不可用,无法严格使用该端口`);
}
const boundedAttempts = range
? Number.isFinite(maxAttempts)
? Math.min(Math.max(0, maxAttempts), range.end - startPort)
@@ -565,6 +578,7 @@ export async function resolveDevStackPorts(config) {
preferredPort: portConfig.preferredPort,
reservedPorts,
portRange: portConfig.portRange,
strict: Boolean(portConfig.strict),
});
reservedPorts.add(resolvedPort);
result[name] = resolvedPort;