This commit is contained in:
2026-05-09 17:15:23 +08:00
parent 80a4183b45
commit a0ed128bde
43 changed files with 2573 additions and 381 deletions

View File

@@ -37,14 +37,30 @@ loadEnvFile(resolve(repoRoot, '.env'), fileEnv);
loadEnvFile(resolve(repoRoot, '.env.local'), fileEnv);
loadEnvFile(resolve(repoRoot, '.env.secrets.local'), fileEnv);
function buildTargetCandidates() {
function resolveConfiguredTarget() {
if (fileEnv.GENARRATIVE_RUNTIME_SERVER_TARGET) {
return fileEnv.GENARRATIVE_RUNTIME_SERVER_TARGET;
}
if (fileEnv.RUST_SERVER_TARGET) {
return fileEnv.RUST_SERVER_TARGET;
}
if (fileEnv.GENARRATIVE_API_TARGET) {
return fileEnv.GENARRATIVE_API_TARGET;
}
if (fileEnv.GENARRATIVE_API_PORT) {
return `http://127.0.0.1:${fileEnv.GENARRATIVE_API_PORT}`;
}
return '';
}
function buildFallbackCandidates() {
const candidates = [
fileEnv.GENARRATIVE_RUNTIME_SERVER_TARGET,
fileEnv.RUST_SERVER_TARGET,
fileEnv.GENARRATIVE_API_TARGET,
`http://127.0.0.1:${fileEnv.GENARRATIVE_API_PORT || '3100'}`,
'http://127.0.0.1:8082',
'http://127.0.0.1:3100',
'http://127.0.0.1:8082',
].filter(Boolean);
return Array.from(new Set(candidates));
@@ -70,39 +86,30 @@ async function isTargetReachable(target) {
}
async function resolveRuntimeTarget() {
const candidates = buildTargetCandidates();
const reachableTargets = [];
const configuredTarget = resolveConfiguredTarget();
for (const target of candidates) {
if (await isTargetReachable(target)) {
reachableTargets.push(target);
if (
target === fileEnv.GENARRATIVE_RUNTIME_SERVER_TARGET ||
target === fileEnv.RUST_SERVER_TARGET ||
target === fileEnv.GENARRATIVE_API_TARGET
) {
return {
target,
fallbackUsed: false,
};
}
}
}
if (reachableTargets.length > 0) {
if (configuredTarget) {
return {
target: reachableTargets[0],
fallbackUsed: true,
target: configuredTarget,
fallbackUsed: false,
targetUnavailable: !(await isTargetReachable(configuredTarget)),
};
}
for (const target of buildFallbackCandidates()) {
if (await isTargetReachable(target)) {
return {
target,
fallbackUsed: true,
targetUnavailable: false,
};
}
}
return {
target:
fileEnv.GENARRATIVE_RUNTIME_SERVER_TARGET ||
fileEnv.RUST_SERVER_TARGET ||
fileEnv.GENARRATIVE_API_TARGET ||
`http://127.0.0.1:${fileEnv.GENARRATIVE_API_PORT || '3100'}`,
target: 'http://127.0.0.1:3100',
fallbackUsed: false,
targetUnavailable: true,
};
}
@@ -113,6 +120,12 @@ if (runtimeTarget.fallbackUsed) {
);
}
if (runtimeTarget.targetUnavailable) {
console.warn(
`[dev:web] Rust target 当前不可用: ${runtimeTarget.target},请先启动 api-server。`,
);
}
const mergedEnv = {
...fileEnv,
RUST_SERVER_TARGET: runtimeTarget.target,