eee2bcc071
包含本地 dev 链路完整跑通的工具集(不进生产): backend: - dev_auth.py: /api/dev/login Mock 企微 OAuth(/dev/* 路由) - messages.py: dev 模式短路企微推送,避免 invalid corpid 噪音 - main.py: dev 模式启动时建 5 条 demo conversation,让前端有数据可测 frontend: - PortalSelect.vue: dev 模式 enterRole 跳完整 URL(5173/5174/5175 端口),生产仍走相对路径 infrastructure: - docker-compose.dev.yml: dev compose(包含 backend/postgres/redis) scripts(Windows PowerShell): - dev-frontend-install.ps1: 一次性装 4 个前端依赖 - dev-frontend-start.ps1: 后台起 4 个前端 dev server - dev-check-schema-drift.ps1: 对比 SQLAlchemy 模型 vs Postgres schema,漂移 exit 1 docs: - CURRENT-FOCUS.md: 项目状态看板(每次 session 维护)
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 |