# Local build and push script # Usage: .\scripts\deploy\build-and-push.ps1 $ErrorActionPreference = "Stop" Write-Host "Starting local build and push process..." -ForegroundColor Cyan if (-not (Test-Path "package.json")) { Write-Host "Error: Please run this script from project root" -ForegroundColor Red exit 1 } Write-Host "Cleaning old build artifacts..." -ForegroundColor Yellow $distPath = "apps\web-antd\dist" if (Test-Path $distPath) { Remove-Item -Recurse -Force $distPath } if (-not (Test-Path "node_modules")) { Write-Host "Installing dependencies..." -ForegroundColor Yellow pnpm install } Write-Host "Building project..." -ForegroundColor Yellow # 确保使用生产环境模式构建,避免使用开发环境配置 $env:NODE_ENV = "production" pnpm build:antd if (-not (Test-Path $distPath)) { Write-Host "Error: Build failed, dist directory not found" -ForegroundColor Red exit 1 } $distItems = Get-ChildItem $distPath -ErrorAction SilentlyContinue if ($null -eq $distItems) { Write-Host "Error: Build failed, dist directory is empty" -ForegroundColor Red exit 1 } if ($distItems.Count -eq 0) { Write-Host "Error: Build failed, dist directory is empty" -ForegroundColor Red exit 1 } Write-Host "Build successful!" -ForegroundColor Green $buildSize = (Get-ChildItem $distPath -Recurse | Measure-Object -Property Length -Sum).Sum / 1MB $buildSizeRounded = [math]::Round($buildSize, 2) Write-Host "Build size: $buildSizeRounded MB" -ForegroundColor Cyan $response = Read-Host "Do you want to commit and push to repository? (y/n)" if ($response -eq "y" -or $response -eq "Y") { # 只检查 dist 目录的变化,不检查其他文件 $distStatus = git status --porcelain apps/web-antd/dist if ($distStatus) { Write-Host "Staging build artifacts..." -ForegroundColor Yellow # 只添加 dist 目录,不添加其他文件 git add -f apps/web-antd/dist Write-Host "Committing changes..." -ForegroundColor Yellow # 使用 --no-verify 跳过 pre-commit hooks,避免检查大量构建产物文件 # 注意:不要使用 [skip ci],否则 CI/CD 不会触发 git commit --no-verify -m "chore: build and deploy web-antd" 2>&1 | Out-Null Write-Host "Pushing to repository..." -ForegroundColor Yellow git push origin master Write-Host "Build artifacts pushed successfully!" -ForegroundColor Green Write-Host "Waiting for CI/CD to deploy..." -ForegroundColor Cyan } else { Write-Host "No changes in dist directory to commit" -ForegroundColor Yellow Write-Host "Note: Only dist directory changes will be committed, other files are ignored" -ForegroundColor Cyan } } else { Write-Host "Skipping git push. You can manually commit and push later." -ForegroundColor Yellow } Write-Host "Done!" -ForegroundColor Green