# client-package.ps1 # 一键打包前端项目:zdxt-admin-plus-ui + zdxt-enforcement-code-app # 输出到 /dist/{timestamp}_{env}/ 目录 # # 用法: # .\client-package.ps1 # 默认 dev 环境 # .\client-package.ps1 -BuildEnv prod # prod 环境 param( [ValidateSet("dev", "prod")] [string]$BuildEnv = "dev" ) $ErrorActionPreference = "Stop" $projectRoot = (Get-Item $PSScriptRoot).Parent.FullName $timestamp = Get-Date -Format "yyyy-MM-dd_HH" $folderName = "{0}_{1}" -f $timestamp, $BuildEnv $deployDir = Join-Path $projectRoot "dist\$folderName" # --- 项目配置 --- $uiProjectDir = Join-Path $projectRoot "zdxt-web-client\zdxt-admin-plus-ui" $uiName = "zdxt-admin-plus-ui" $uiOutputName = "zdxt-sup-web" $appProjectDir = Join-Path $projectRoot "zdxt-web-client\zdxt-enforcement-code-app" $appEndpoints = @( @{ mode = "enterprise"; output = "zdxt-ent-app" }, @{ mode = "enforcement"; output = "zdxt-enf-app" } ) Write-Host "" Write-Host "============================================" -ForegroundColor Cyan Write-Host " ZDXT Client Package Script" -ForegroundColor Cyan Write-Host (" Env: {0} | Timestamp: {1}" -f $BuildEnv, $timestamp) -ForegroundColor Cyan Write-Host (" Output: dist\{0}" -f $folderName) -ForegroundColor Cyan Write-Host "============================================" -ForegroundColor Cyan Write-Host "" # ====================================================== # Part 1: zdxt-admin-plus-ui # ====================================================== Write-Host ">>> [Part 1/2] zdxt-admin-plus-ui" -ForegroundColor Magenta Write-Host "" # 1.1 npm install Write-Host "[1/3] npm install ..." -ForegroundColor Yellow Set-Location $uiProjectDir if (-not (Test-Path (Join-Path $uiProjectDir "node_modules"))) { npm install if ($LASTEXITCODE -ne 0) { Write-Host "npm install Failed!" -ForegroundColor Red exit 1 } Write-Host "[1/3] npm install Success" -ForegroundColor Green } else { Write-Host "[1/3] node_modules exists, skip install" -ForegroundColor Green } # 1.2 Vite Build Write-Host "" $buildScript = "{0}-build:{1}" -f $uiName, $BuildEnv Write-Host ("[2/3] npm run {0} ..." -f $buildScript) -ForegroundColor Yellow npm run $buildScript if ($LASTEXITCODE -ne 0) { Write-Host "Vite Build Failed!" -ForegroundColor Red exit 1 } Write-Host "[2/3] Vite Build Success" -ForegroundColor Green # 1.3 Copy Write-Host "" Write-Host "[3/3] Copy Artifacts ..." -ForegroundColor Yellow $buildOutputDir = Join-Path $uiProjectDir "dist\$BuildEnv" if (-not (Test-Path $buildOutputDir)) { Write-Host (" Build output not found: {0}" -f $buildOutputDir) -ForegroundColor Red exit 1 } $targetDir = Join-Path $deployDir $uiOutputName New-Item -ItemType Directory -Force -Path $targetDir | Out-Null Copy-Item -Path (Join-Path $buildOutputDir "*") -Destination $targetDir -Recurse -Force Write-Host (" [ui] {0}" -f $uiOutputName) -ForegroundColor Green # ====================================================== # Part 2: zdxt-enforcement-code-app (enterprise + enforcement) # ====================================================== Write-Host "" Write-Host ">>> [Part 2/2] zdxt-enforcement-code-app" -ForegroundColor Magenta Write-Host "" # 2.1 npm install Write-Host "[1/3] npm install ..." -ForegroundColor Yellow Set-Location $appProjectDir if (-not (Test-Path (Join-Path $appProjectDir "node_modules"))) { npm install if ($LASTEXITCODE -ne 0) { Write-Host "npm install Failed!" -ForegroundColor Red exit 1 } Write-Host "[1/3] npm install Success" -ForegroundColor Green } else { Write-Host "[1/3] node_modules exists, skip install" -ForegroundColor Green } # 2.2 Build each endpoint Write-Host "" Write-Host "[2/3] Vite Build (2 endpoints) ..." -ForegroundColor Yellow foreach ($ep in $appEndpoints) { $mode = $ep.mode $outputName = $ep.output $script = "app-build:{0}-{1}" -f $mode, $BuildEnv Write-Host "" Write-Host (" Building: npm run {0} ..." -f $script) -ForegroundColor Yellow npm run $script if ($LASTEXITCODE -ne 0) { Write-Host (" Build [{0}] Failed!" -f $mode) -ForegroundColor Red exit 1 } Write-Host (" Build [{0}] Success" -f $mode) -ForegroundColor Green } # 2.3 Copy each endpoint Write-Host "" Write-Host "[3/3] Copy Artifacts ..." -ForegroundColor Yellow foreach ($ep in $appEndpoints) { $mode = $ep.mode $outputName = $ep.output $appBuildDir = Join-Path $appProjectDir ("dist\{0}-{1}" -f $mode, $BuildEnv) if (-not (Test-Path $appBuildDir)) { Write-Host (" Build output not found: {0}" -f $appBuildDir) -ForegroundColor Red exit 1 } $appTargetDir = Join-Path $deployDir $outputName New-Item -ItemType Directory -Force -Path $appTargetDir | Out-Null Copy-Item -Path (Join-Path $appBuildDir "*") -Destination $appTargetDir -Recurse -Force Write-Host (" [app] {0}" -f $outputName) -ForegroundColor Green } # ============ Done ============ Write-Host "" Write-Host "============================================" -ForegroundColor Cyan Write-Host " All Client Builds Done!" -ForegroundColor Cyan Write-Host (" Output: {0}" -f $deployDir) -ForegroundColor Cyan Write-Host " |- zdxt-sup-web" -ForegroundColor Cyan Write-Host " |- zdxt-ent-app" -ForegroundColor Cyan Write-Host " |- zdxt-enf-app" -ForegroundColor Cyan Write-Host "============================================" -ForegroundColor Cyan Write-Host ""