Files
FunConnect/scripts/build-client.ps1

182 lines
5.8 KiB
PowerShell
Raw Permalink Normal View History

#
# FunMC 客户端构建脚本 (Windows)
# 用法: .\scripts\build-client.ps1 -Platform <平台> -ServerUrl <服务器URL>
#
# 示例:
2026-02-25 20:35:01 +08:00
# .\scripts\build-client.ps1 -Platform all -ServerUrl "http://fc.funmc.cn:3000"
# .\scripts\build-client.ps1 -Platform windows -ServerUrl "http://192.168.1.100:3000"
#
param(
[string]$Platform = "all",
[string]$ServerUrl = ""
)
$ErrorActionPreference = "Stop"
# 配置
$Version = (Get-Content "client\Cargo.toml" | Select-String 'version = "' | Select-Object -First 1) -replace '.*"([^"]+)".*', '$1'
$OutputDir = ".\dist"
# 颜色输出函数
function Write-Info($Message) { Write-Host "[INFO] $Message" -ForegroundColor Cyan }
function Write-Success($Message) { Write-Host "[✓] $Message" -ForegroundColor Green }
function Write-Warning($Message) { Write-Host "[!] $Message" -ForegroundColor Yellow }
function Write-Err($Message) { Write-Host "[✗] $Message" -ForegroundColor Red }
Write-Host ""
Write-Host "╔═══════════════════════════════════════════════════════════╗" -ForegroundColor Cyan
Write-Host "║ FunMC 客户端构建脚本 v$Version" -ForegroundColor Cyan
Write-Host "║ 魔幻方开发 ║" -ForegroundColor Cyan
Write-Host "╚═══════════════════════════════════════════════════════════╝" -ForegroundColor Cyan
Write-Host ""
# 检查依赖
function Test-Dependencies {
Write-Info "检查构建依赖..."
if (-not (Get-Command cargo -ErrorAction SilentlyContinue)) {
Write-Err "错误: 未找到 Rust/Cargo"
exit 1
}
if (-not (Get-Command node -ErrorAction SilentlyContinue)) {
Write-Err "错误: 未找到 Node.js"
exit 1
}
if (-not (Get-Command npm -ErrorAction SilentlyContinue)) {
Write-Err "错误: 未找到 npm"
exit 1
}
Write-Success "依赖检查通过"
}
# 写入服务器配置
function Write-Config {
if ($ServerUrl) {
Write-Info "写入服务器配置: $ServerUrl"
$config = @{
server_url = $ServerUrl
version = $Version
} | ConvertTo-Json
$config | Out-File -FilePath "client\ui\src\config.json" -Encoding UTF8
Write-Success "配置写入完成"
}
}
# 构建前端
function Build-Frontend {
Write-Info "构建前端..."
Push-Location "client\ui"
npm install
npm run build
Pop-Location
Write-Success "前端构建完成"
}
# 构建 Windows
function Build-Windows {
Write-Info "构建 Windows (x64)..."
Push-Location "client"
cargo tauri build
Pop-Location
New-Item -ItemType Directory -Force -Path $OutputDir | Out-Null
$msiBundles = Get-ChildItem "client\target\release\bundle\msi\*.msi" -ErrorAction SilentlyContinue
if ($msiBundles) {
Copy-Item $msiBundles[0].FullName "$OutputDir\FunMC-$Version-windows-x64.msi"
}
$nsiBundles = Get-ChildItem "client\target\release\bundle\nsis\*.exe" -ErrorAction SilentlyContinue
if ($nsiBundles) {
Copy-Item $nsiBundles[0].FullName "$OutputDir\FunMC-$Version-windows-x64.exe"
}
Write-Success "Windows 构建完成"
}
# 构建 Android
function Build-Android {
Write-Info "构建 Android..."
if (-not $env:ANDROID_HOME) {
Write-Warning "未设置 ANDROID_HOME跳过 Android 构建"
return
}
Push-Location "client"
cargo tauri android build --apk
Pop-Location
New-Item -ItemType Directory -Force -Path $OutputDir | Out-Null
$apkBundles = Get-ChildItem "client\gen\android\app\build\outputs\apk\universal\release\*.apk" -ErrorAction SilentlyContinue
if ($apkBundles) {
Copy-Item $apkBundles[0].FullName "$OutputDir\FunMC-$Version-android.apk"
}
Write-Success "Android 构建完成"
}
# 显示构建结果
function Show-Results {
Write-Host ""
Write-Host "╔═══════════════════════════════════════════════════════════╗" -ForegroundColor Cyan
Write-Host "║ 构建完成! ║" -ForegroundColor Cyan
Write-Host "╚═══════════════════════════════════════════════════════════╝" -ForegroundColor Cyan
Write-Host ""
Write-Host "输出目录: $OutputDir" -ForegroundColor Green
Write-Host ""
if (Test-Path $OutputDir) {
Write-Host "构建产物:"
Get-ChildItem $OutputDir | Format-Table Name, Length -AutoSize
}
Write-Host ""
Write-Host "部署说明:" -ForegroundColor Yellow
Write-Host "1. 将 $OutputDir 目录下的文件复制到服务器的 downloads 目录"
Write-Host "2. 用户访问 http://your-server:3000/download 即可下载"
Write-Host ""
Write-Host "魔幻方开发" -ForegroundColor Green
}
# 主流程
try {
Test-Dependencies
Write-Config
Build-Frontend
switch ($Platform) {
"windows" {
Build-Windows
}
"android" {
Build-Android
}
"all" {
Build-Windows
Build-Android
}
default {
Write-Err "未知平台: $Platform"
Write-Host "支持的平台: windows, android, all"
exit 1
}
}
Show-Results
} catch {
Write-Err "构建过程中出错: $_"
exit 1
}