<# .SYNOPSIS 加载 .env 并启动单个服务(内部辅助脚本) .DESCRIPTION 从项目根 .env 加载环境变量到当前进程,然后启动指定服务。 用法:powershell -File scripts\dev-service.ps1 例: powershell -File scripts\dev-service.ps1 @edu/iam-service #> param( [Parameter(Mandatory=$true)] [string]$Filter ) $ProjectRoot = Split-Path -Parent $PSScriptRoot $envFile = Join-Path $ProjectRoot ".env" if (Test-Path $envFile) { $envLines = Get-Content $envFile foreach ($line in $envLines) { $line = $line.Trim() if (-not $line -or $line.StartsWith("#") -or -not $line.Contains("=")) { continue } $idx = $line.IndexOf("=") $key = $line.Substring(0, $idx).Trim() $val = $line.Substring($idx + 1).Trim() if ($val.StartsWith('"') -and $val.EndsWith('"')) { $val = $val.Substring(1, $val.Length - 2) } if ($val.StartsWith("'") -and $val.EndsWith("'")) { $val = $val.Substring(1, $val.Length - 2) } [Environment]::SetEnvironmentVariable($key, $val, "Process") } Write-Host "[dev-service] Loaded .env" -ForegroundColor Green } # 补充 dev 模式默认值 if (-not $env:DEV_MODE) { $env:DEV_MODE = "true" } if (-not $env:OTEL_EXPORTER_OTLP_ENDPOINT) { $env:OTEL_EXPORTER_OTLP_ENDPOINT = "http://localhost:4318" } if (-not $env:NEO4J_URI) { $env:NEO4J_URI = "bolt://localhost:7687" } if (-not $env:NEO4J_USER) { $env:NEO4J_USER = "neo4j" } if (-not $env:CLICKHOUSE_URL) { $env:CLICKHOUSE_URL = "http://localhost:8123" } if (-not $env:ES_URL) { $env:ES_URL = "http://localhost:9200" } if (-not $env:ROUTER_AUTH_SECRET) { $env:ROUTER_AUTH_SECRET = "dev-router-secret" } if (-not $env:CLASSES_SERVICE_URL) { $env:CLASSES_SERVICE_URL = "http://localhost:3001" } if (-not $env:IAM_SERVICE_URL) { $env:IAM_SERVICE_URL = "http://localhost:3002" } if (-not $env:APOLLO_ROUTER_URL) { $env:APOLLO_ROUTER_URL = "http://localhost:3000" } if (-not $env:CORE_EDU_SERVICE_URL) { $env:CORE_EDU_SERVICE_URL = "http://localhost:3004" } if (-not $env:CONTENT_SERVICE_URL) { $env:CONTENT_SERVICE_URL = "http://localhost:3005" } if (-not $env:DATA_ANA_SERVICE_URL) { $env:DATA_ANA_SERVICE_URL = "http://localhost:3006" } if (-not $env:MSG_SERVICE_URL) { $env:MSG_SERVICE_URL = "http://localhost:3007" } if (-not $env:AI_SERVICE_URL) { $env:AI_SERVICE_URL = "http://localhost:3008" } if (-not $env:CORS_ORIGINS) { $env:CORS_ORIGINS = "http://localhost:4000,http://localhost:4010" } if (-not $env:JWKS_URL) { $env:JWKS_URL = "http://localhost:3002/v1/iam/.well-known/jwks.json" } if (-not $env:PUSH_INTERNAL_TOKEN) { $env:PUSH_INTERNAL_TOKEN = "edu-internal-token" } Write-Host "[dev-service] Starting $Filter with DEV_MODE=$($env:DEV_MODE)" -ForegroundColor Cyan Set-Location $ProjectRoot pnpm --filter $Filter dev