106 lines
4.8 KiB
PowerShell
106 lines
4.8 KiB
PowerShell
|
|
# =============================================================================
|
|||
|
|
# 企微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
|