You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
7.1 KiB
183 lines
7.1 KiB
# GoFaster Full Stack Development Environment |
|
param( |
|
[switch]$Debug, |
|
[switch]$Watch, |
|
[switch]$BackendOnly, |
|
[switch]$FrontendOnly |
|
) |
|
|
|
# Set console encoding |
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 |
|
$OutputEncoding = [System.Text.Encoding]::UTF8 |
|
|
|
# Set environment variables |
|
$env:VUE_CLI_BABEL_TRANSPILE_MODULES = "false" |
|
$env:VUE_CLI_MODERN_BUILD = "false" |
|
$env:VUE_CLI_LOG_LEVEL = "info" |
|
$env:VUE_CLI_DEBUG = "true" |
|
$env:LANG = "zh_CN.UTF-8" |
|
$env:LC_ALL = "zh_CN.UTF-8" |
|
$env:NODE_OPTIONS = "--max-old-space-size=4096" |
|
|
|
# Display startup information |
|
Write-Host "Starting GoFaster Full Stack Development Environment..." -ForegroundColor Cyan |
|
Write-Host "Encoding: UTF-8" -ForegroundColor Green |
|
Write-Host "Log Level: INFO" -ForegroundColor Green |
|
Write-Host "Hot Reload: Enabled" -ForegroundColor Green |
|
Write-Host "" |
|
Write-Host "Frontend: Electron + Vue.js with Enhanced Hot Reload" -ForegroundColor Green |
|
Write-Host "Backend: Go + Gin with Air Hot Reload" -ForegroundColor Green |
|
Write-Host "" |
|
|
|
# Check run mode |
|
if ($Debug) { |
|
Write-Host "Debug mode starting..." -ForegroundColor Magenta |
|
$env:DEBUG = "*" |
|
} elseif ($Watch) { |
|
Write-Host "Watch mode starting..." -ForegroundColor Blue |
|
} else { |
|
Write-Host "Standard mode starting..." -ForegroundColor Green |
|
} |
|
|
|
Write-Host "" |
|
|
|
# Check dependencies |
|
Write-Host "Checking frontend dependencies..." -ForegroundColor Yellow |
|
if (-not (Test-Path "app/node_modules")) { |
|
Write-Host "Frontend dependencies not installed, installing..." -ForegroundColor Yellow |
|
Set-Location "app" |
|
npm install |
|
if ($LASTEXITCODE -ne 0) { |
|
Write-Host "Frontend dependency installation failed" -ForegroundColor Red |
|
exit 1 |
|
} |
|
Set-Location ".." |
|
} |
|
|
|
# Generate route mappings before starting (only if needed) |
|
Write-Host "Checking route mappings..." -ForegroundColor Yellow |
|
Set-Location "app" |
|
try { |
|
# 检查映射文件是否存在且是否需要更新 |
|
$mappingFile = "src\renderer\modules\route-sync\direct-route-mappings.js" |
|
if (-not (Test-Path $mappingFile)) { |
|
Write-Host "Route mapping file not found, generating..." -ForegroundColor Yellow |
|
node scripts/generate-route-mappings.js |
|
if ($LASTEXITCODE -ne 0) { |
|
Write-Host "Route mapping generation failed" -ForegroundColor Red |
|
exit 1 |
|
} |
|
Write-Host "Route mappings generated successfully" -ForegroundColor Green |
|
} else { |
|
Write-Host "Route mapping file exists, skipping generation (will be handled by webpack plugin)" -ForegroundColor Green |
|
} |
|
} catch { |
|
Write-Host "Route mapping check failed: $($_.Exception.Message)" -ForegroundColor Red |
|
exit 1 |
|
} |
|
Set-Location ".." |
|
|
|
# Install cross-env if not exists |
|
$crossEnvInstalled = npm list cross-env 2>$null -Path "app" |
|
if (-not $crossEnvInstalled) { |
|
Write-Host "Installing cross-env..." -ForegroundColor Yellow |
|
Set-Location "app" |
|
npm install --save-dev cross-env |
|
Set-Location ".." |
|
} |
|
|
|
Write-Host "Frontend dependency check completed" -ForegroundColor Green |
|
Write-Host "" |
|
|
|
# Check backend dependencies |
|
Write-Host "Checking backend dependencies..." -ForegroundColor Yellow |
|
if (-not (Test-Path "backend/go.mod")) { |
|
Write-Host "Backend Go module not found" -ForegroundColor Red |
|
exit 1 |
|
} |
|
|
|
# Check if air is installed |
|
try { |
|
$airVersion = air -v 2>$null |
|
if (-not $airVersion) { |
|
Write-Host "Air not installed, installing..." -ForegroundColor Yellow |
|
go install github.com/air-verse/air@latest |
|
} |
|
} catch { |
|
Write-Host "Air not installed, installing..." -ForegroundColor Yellow |
|
go install github.com/air-verse/air@latest |
|
} |
|
|
|
Write-Host "Backend dependency check completed" -ForegroundColor Green |
|
Write-Host "" |
|
|
|
# Select startup mode - 修复:默认使用watch模式确保热重载 |
|
$frontendScript = if ($Debug) { "npm run dev:debug" } elseif ($Watch) { "npm run dev:watch" } else { "npm run dev:watch" } |
|
$backendScript = "air" |
|
|
|
# Start services |
|
if (-not $FrontendOnly) { |
|
Write-Host "Starting backend hot reload..." -ForegroundColor Green |
|
$backendProcess = Start-Process powershell -ArgumentList "-NoExit", "-Command", "cd backend; $backendScript" -WindowStyle Normal -PassThru |
|
Write-Host "Backend started (PID: $($backendProcess.Id))" -ForegroundColor Green |
|
|
|
# Wait for backend to start |
|
Write-Host "Waiting for backend to start..." -ForegroundColor Yellow |
|
Start-Sleep -Seconds 3 |
|
|
|
# Check if backend started successfully |
|
try { |
|
$response = Invoke-WebRequest -Uri "http://localhost:8080/health" -Method GET -TimeoutSec 5 -ErrorAction Stop |
|
if ($response.StatusCode -eq 200) { |
|
Write-Host "Backend started successfully" -ForegroundColor Green |
|
} |
|
} catch { |
|
Write-Host "Backend might still be starting, continuing with frontend..." -ForegroundColor Yellow |
|
} |
|
} |
|
|
|
if (-not $BackendOnly) { |
|
Write-Host "Starting frontend hot reload..." -ForegroundColor Green |
|
Write-Host "Using script: $frontendScript" -ForegroundColor Cyan |
|
$frontendProcess = Start-Process powershell -ArgumentList "-NoExit", "-Command", "cd app; $frontendScript" -WindowStyle Normal -PassThru |
|
Write-Host "Frontend started (PID: $($frontendProcess.Id))" -ForegroundColor Green |
|
} |
|
|
|
Write-Host "" |
|
Write-Host "Service startup completed!" -ForegroundColor Green |
|
|
|
if (-not $BackendOnly) { |
|
Write-Host "Backend: http://localhost:8080" -ForegroundColor Cyan |
|
Write-Host "Swagger: http://localhost:8080/swagger/index.html" -ForegroundColor Cyan |
|
} |
|
|
|
if (-not $FrontendOnly) { |
|
Write-Host "Frontend: Electron app (auto-reload enabled)" -ForegroundColor Cyan |
|
Write-Host "Note: Frontend now uses watch mode by default for better hot reload" -ForegroundColor Yellow |
|
} |
|
|
|
Write-Host "" |
|
Write-Host "Usage:" -ForegroundColor Yellow |
|
Write-Host " - Use -Debug parameter to enable detailed debug info" -ForegroundColor White |
|
Write-Host " - Use -Watch parameter to explicitly enable file watching" -ForegroundColor White |
|
Write-Host " - Use -BackendOnly to start only backend" -ForegroundColor White |
|
Write-Host " - Use -FrontendOnly to start only frontend" -ForegroundColor White |
|
Write-Host " - Press Ctrl+C to stop services" -ForegroundColor White |
|
Write-Host "" |
|
|
|
# Display process information |
|
if (-not $BackendOnly -and -not $FrontendOnly) { |
|
Write-Host "Process Information:" -ForegroundColor Yellow |
|
Write-Host " Backend PID: $($backendProcess.Id)" -ForegroundColor White |
|
Write-Host " Frontend PID: $($frontendProcess.Id)" -ForegroundColor White |
|
Write-Host "" |
|
Write-Host "Management Commands:" -ForegroundColor Yellow |
|
Write-Host " Stop Backend: Stop-Process -Id $($backendProcess.Id)" -ForegroundColor White |
|
Write-Host " Stop Frontend: Stop-Process -Id $($frontendProcess.Id)" -ForegroundColor White |
|
Write-Host " Stop All: Get-Process | Where-Object {$_.ProcessName -eq 'powershell'} | Stop-Process" -ForegroundColor White |
|
} |
|
|
|
Write-Host "Code changes will automatically trigger rebuilds and reloads!" -ForegroundColor Yellow |
|
Write-Host "Frontend now uses watch mode by default for better hot reload experience" -ForegroundColor Green |
|
Write-Host "Press any key to exit..." |
|
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
|
|