diff --git a/client/.env.example b/client/.env.example index dccfc9bcc..7d1cb3768 100644 --- a/client/.env.example +++ b/client/.env.example @@ -1,11 +1,7 @@ # Frontend optional overrides -# 大多数本地开发场景不需要这个文件。 -# 如果不显式配置,开发环境默认会把 API 指到: -# http(s)://当前页面 hostname:3000/api -# 如果你通过局域网地址访问页面,不要把 API 固定成 localhost, -# 否则浏览器会去请求“当前访问设备自己的 localhost:3000”。 - -# 只有在你明确要固定 API 地址时才取消注释: -# VITE_API_BASE_URL=http://localhost:3000/api +# API 服务地址(包含端口),默认 http://localhost:3001/api +VITE_API_BASE_URL=http://localhost:3001/api +# Vite 开发服务器端口 +VITE_DEV_PORT=5174 # 默认 10 分钟,可按需要调大。 VITE_API_TIMEOUT_MS=600000 diff --git a/client/src/lib/constants.ts b/client/src/lib/constants.ts index 3f608bf64..979e2d06a 100644 --- a/client/src/lib/constants.ts +++ b/client/src/lib/constants.ts @@ -10,11 +10,12 @@ function trimTrailingSlash(value: string): string { function resolveApiBaseUrl(): string { const configuredBaseUrl = import.meta.env.VITE_API_BASE_URL?.trim(); + const apiPort = import.meta.env.VITE_API_PORT?.trim() || "3001"; if (!import.meta.env.DEV || typeof window === "undefined") { - return configuredBaseUrl || "http://localhost:3000/api"; + return configuredBaseUrl || `http://localhost:${apiPort}/api`; } - const inferredBaseUrl = `${window.location.protocol}//${window.location.hostname}:3000/api`; + const inferredBaseUrl = `${window.location.protocol}//${window.location.hostname}:${apiPort}/api`; if (!configuredBaseUrl) { return inferredBaseUrl; } @@ -26,7 +27,7 @@ function resolveApiBaseUrl(): string { } parsed.hostname = window.location.hostname; if (!parsed.port) { - parsed.port = "3000"; + parsed.port = import.meta.env.VITE_API_PORT?.trim() || "3001"; } return trimTrailingSlash(parsed.toString()); } catch { diff --git a/client/vite.config.ts b/client/vite.config.ts index 8b926ba78..115b69614 100644 --- a/client/vite.config.ts +++ b/client/vite.config.ts @@ -63,6 +63,7 @@ export default defineConfig({ }, }, server: { - host: true, // 允许局域网访问(监听 0.0.0.0) + port: Number(process.env.VITE_DEV_PORT) || 5174, + host: true, }, }); diff --git a/package.json b/package.json index 49869674f..04d8dccf8 100644 --- a/package.json +++ b/package.json @@ -14,13 +14,14 @@ ], "scripts": { "dev": "node scripts/run-with-log.cjs --name dev -- pnpm dev:raw", - "dev:raw": "concurrently \"pnpm dev:shared\" \"pnpm dev:server\" \"pnpm dev:client:wait\"", + "dev:raw": "concurrently \"pnpm dev:server\" \"pnpm dev:after-server\"", "dev:log": "node scripts/run-with-log.cjs --name dev -- pnpm dev:raw", "dev:shared": "pnpm --filter @ai-novel/shared dev", "dev:server": "pnpm --filter @ai-novel/server dev", "dev:server:log": "node scripts/run-with-log.cjs --name server -- pnpm --filter @ai-novel/server dev", "dev:client": "pnpm --filter @ai-novel/client dev", - "dev:client:wait": "node scripts/wait-for-port.cjs --port 3000 && pnpm dev:client", + "dev:client:wait": "node scripts/wait-for-port.cjs --port 3001 && pnpm dev:client", + "dev:after-server": "node scripts/wait-for-port.cjs && concurrently \"pnpm dev:shared\" \"pnpm dev:client\"", "db:migrate": "pnpm --filter @ai-novel/server db:migrate", "db:restore": "pnpm --filter @ai-novel/server db:restore", "db:seed": "pnpm --filter @ai-novel/server db:seed", diff --git a/scripts/wait-for-port.cjs b/scripts/wait-for-port.cjs index ec835fd0e..005a0edf4 100644 --- a/scripts/wait-for-port.cjs +++ b/scripts/wait-for-port.cjs @@ -18,8 +18,8 @@ function parseArgs(argv) { hosts: process.env.WAIT_FOR_PORT_HOSTS ? parseHosts(process.env.WAIT_FOR_PORT_HOSTS) : [...DEFAULT_HOSTS], - port: 3000, - timeoutMs: 120000, + port: Number(process.env.SERVER_PORT) || 3001, + timeoutMs: 300000, intervalMs: 500, help: false, }; @@ -61,7 +61,7 @@ function parseArgs(argv) { } function printHelp() { - console.log("Usage: node scripts/wait-for-port.cjs [--host 127.0.0.1,localhost,::1] [--port 3000] [--timeout 120000] [--interval 500]"); + console.log("Usage: node scripts/wait-for-port.cjs [--host 127.0.0.1,localhost,::1] [--port 3001] [--timeout 300000] [--interval 500]"); } function wait(ms) { diff --git a/server/src/app.ts b/server/src/app.ts index 726a6769e..1666a75f8 100644 --- a/server/src/app.ts +++ b/server/src/app.ts @@ -160,7 +160,7 @@ function getLanIp(): string | null { async function bootstrap(): Promise { const ragCompatibilityReport = await initializeRagSettingsCompatibility(); const app = createApp(); - const port = Number(process.env.PORT ?? 3000); + const port = Number(process.env.PORT ?? 3001); const allowLan = parseEnvFlag(process.env.ALLOW_LAN, process.env.NODE_ENV !== "production"); const host = process.env.HOST ?? (allowLan ? "0.0.0.0" : "localhost"); ragServices.ragWorker.start();