# ============================================================================= # 企微IT智能服务台 — 前端 dev 环境一键安装脚本 # ============================================================================= # 作用:一次性给 4 个前端项目装 pnpm 依赖 # 用法:.\scripts\dev-frontend-install.ps1 # 前置:已装 pnpm (npm install -g pnpm) # 输出:每个前端在它自己的目录下创建 node_modules # 注意:首次安装 3-8 分钟,后续 pnpm install 会很快(增量) # ============================================================================= $ErrorActionPreference = 'Stop' $ProjectRoot = $PSScriptRoot | Split-Path -Parent Set-Location $ProjectRoot # -------------------------------------------------------------------------- # 自动把 npm 全局 bin 加进 PATH(只对本脚本生效,不污染系统) # 原因:某些用户(如 NVM 用户)系统 PATH 缺 npm global bin,pnpm 找不到 # -------------------------------------------------------------------------- $NpmGlobalBin = npm config get prefix 2>$null if ($NpmGlobalBin -and (Test-Path $NpmGlobalBin)) { if ($env:PATH -notlike "*$NpmGlobalBin*") { $env:PATH = "$env:PATH;$NpmGlobalBin" Write-Host " ℹ 已临时把 $NpmGlobalBin 加进 PATH(只对本次脚本生效)" -ForegroundColor DarkGray } } $Frontends = @('frontend-h5', 'frontend-agent', 'frontend-admin', 'frontend-portal') # -------------------------------------------------------------------------- # 颜色函数 # -------------------------------------------------------------------------- function Write-Step($msg) { Write-Host "`n$msg" -ForegroundColor Cyan } function Write-OK($msg) { Write-Host " ✓ $msg" -ForegroundColor Green } function Write-Warn($msg) { Write-Host " ⚠ $msg" -ForegroundColor Yellow } function Write-Err($msg) { Write-Host " ✗ $msg" -ForegroundColor Red } # -------------------------------------------------------------------------- # 前置检查 # -------------------------------------------------------------------------- Write-Step "═══ 企微IT智能服务台 — 前端依赖安装 ═══" # 检查 pnpm(包含 npm global bin 路径) $pnpmCmd = Get-Command pnpm -ErrorAction SilentlyContinue if (-not $pnpmCmd) { Write-Err "pnpm 没装,请先跑: npm install -g pnpm" exit 1 } $pnpmVer = & $pnpmCmd.Source --version 2>&1 Write-OK "pnpm 已装: $pnpmVer" # 检查 Node 版本(警告,不阻塞) $nodeVer = node --version Write-Host " Node 版本: $nodeVer" if ($nodeVer -notmatch '^v(20\.|21\.|22\.)') { Write-Warn "前端要求 Node 20.x,你是 $nodeVer。多数情况能跑,出问题再装 Node 20。" } # 检查后端 dev 是否在跑(可选) try { $null = Invoke-WebRequest -Uri 'http://localhost:8000/health' -UseBasicParsing -TimeoutSec 3 Write-OK "后端 dev 在跑 (http://localhost:8000)" } catch { Write-Warn "后端 dev 没跑,Vite 反代会连不上后端。先跑 dev-start.ps1 起后端。" } # -------------------------------------------------------------------------- # 顺序装 4 个前端 # -------------------------------------------------------------------------- foreach ($name in $Frontends) { Write-Step "─── $name ───" $dir = Join-Path $ProjectRoot $name if (-not (Test-Path "$dir/package.json")) { Write-Err "找不到 $dir/package.json,跳过" continue } Set-Location $dir $sw = [System.Diagnostics.Stopwatch]::StartNew() try { pnpm install 2>&1 | Tee-Object -FilePath "$ProjectRoot\.pnpm-install-$name.log" | Out-Host $sw.Stop() Write-OK "$name 装完 ($([math]::Round($sw.Elapsed.TotalSeconds))s)" } catch { $sw.Stop() Write-Err "$name 装失败 ($([math]::Round($sw.Elapsed.TotalSeconds))s)" Write-Host " 详细日志: $ProjectRoot\.pnpm-install-$name.log" -ForegroundColor Yellow Write-Host " 常见原因:网络抖动 / 镜像源不通 / Node 版本太新" -ForegroundColor Yellow } } # -------------------------------------------------------------------------- # 汇总 # -------------------------------------------------------------------------- Write-Step "═══ 装完 ═══" foreach ($name in $Frontends) { $log = "$ProjectRoot\.pnpm-install-$name.log" if ((Test-Path "$ProjectRoot/$name/node_modules") -and (Test-Path "$ProjectRoot/$name/package.json")) { Write-OK "$name 已就绪 (node_modules 存在)" } else { Write-Err "$name 没装好,日志: $log" } } Write-Host "`n下一步:启动前端 dev server" -ForegroundColor Cyan Write-Host " 单独启动: cd frontend-h5 ; pnpm dev" -ForegroundColor Gray Write-Host " 一起启动: d:/资料/03-项目开发/wecom_it_smart_desk-claude/scripts/dev-frontend-start.ps1" -ForegroundColor Gray Write-Host " 全部停止: ...\scripts\dev-frontend-start.ps1 -Stop" -ForegroundColor Gray