feat: 添加新插件支持及多项功能改进
- 新增磁盘加密、打印审计和剪贴板管控插件支持 - 优化水印插件显示效果,支持中文及更多Unicode字符 - 改进硬件资产收集逻辑,更准确获取磁盘和显卡信息 - 增强API错误处理,添加详细日志记录 - 完善前端界面,新增插件管理页面 - 修复多个UI问题,优化页面过渡效果 - 添加环境变量覆盖配置功能 - 实现插件状态管理API - 更新文档和变更日志 - 添加安装程序脚本支持
This commit is contained in:
148
dev.ps1
Normal file
148
dev.ps1
Normal file
@@ -0,0 +1,148 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
CSM 开发环境一键启动脚本
|
||||
.DESCRIPTION
|
||||
并行启动后端服务、前端 dev server 和客户端。
|
||||
Ctrl+C 一次停止所有进程。
|
||||
.USAGE
|
||||
.\dev.ps1 # 启动全部 (server + web + client)
|
||||
.\dev.ps1 -NoClient # 只启动 server + web
|
||||
#>
|
||||
|
||||
param(
|
||||
[switch]$NoClient
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$projectRoot = $PSScriptRoot
|
||||
if (-not $projectRoot) { $projectRoot = $PWD.Path }
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "======================================" -ForegroundColor Cyan
|
||||
Write-Host " CSM Dev Launcher" -ForegroundColor Cyan
|
||||
Write-Host "======================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# --- Ensure frontend dependencies ---
|
||||
if (-not (Test-Path "$projectRoot\web\node_modules")) {
|
||||
Write-Host "[web] Installing dependencies..." -ForegroundColor Yellow
|
||||
Push-Location "$projectRoot\web"
|
||||
npm install
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
# --- Ensure data directory ---
|
||||
$dataDir = Join-Path $projectRoot "data"
|
||||
if (-not (Test-Path $dataDir)) {
|
||||
New-Item -ItemType Directory -Path $dataDir | Out-Null
|
||||
Write-Host "[server] Created data directory" -ForegroundColor Green
|
||||
}
|
||||
|
||||
# --- Build workspace first ---
|
||||
Write-Host "[build] Compiling workspace..." -ForegroundColor Yellow
|
||||
$buildOutput = cargo build --workspace 2>&1
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host "[build] FAILED" -ForegroundColor Red
|
||||
Write-Host $buildOutput
|
||||
exit 1
|
||||
}
|
||||
Write-Host "[build] OK" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# --- Track child processes ---
|
||||
$script:processes = [System.Collections.Generic.List[System.Diagnostics.Process]]::new()
|
||||
|
||||
function Start-Proc {
|
||||
param(
|
||||
[string]$Name,
|
||||
[string]$FilePath,
|
||||
[string[]]$ArgumentList,
|
||||
[string]$WorkingDirectory = $projectRoot
|
||||
)
|
||||
|
||||
$proc = [System.Diagnostics.Process]::new()
|
||||
$proc.StartInfo.FileName = $FilePath
|
||||
$proc.StartInfo.ArgumentList.Clear()
|
||||
foreach ($arg in $ArgumentList) {
|
||||
$proc.StartInfo.ArgumentList.Add($arg)
|
||||
}
|
||||
$proc.StartInfo.WorkingDirectory = $WorkingDirectory
|
||||
$proc.StartInfo.UseShellExecute = $false
|
||||
$proc.StartInfo.RedirectStandardOutput = $false
|
||||
$proc.StartInfo.RedirectStandardError = $false
|
||||
$proc.Start() | Out-Null
|
||||
|
||||
$script:processes.Add($proc)
|
||||
Write-Host " [$Name] PID $($proc.Id) started" -ForegroundColor Green
|
||||
}
|
||||
|
||||
# --- Cleanup on exit ---
|
||||
$script:cleaningUp = $false
|
||||
|
||||
function Cleanup {
|
||||
if ($script:cleaningUp) { return }
|
||||
$script:cleaningUp = $true
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Stopping all services..." -ForegroundColor Yellow
|
||||
|
||||
foreach ($p in $script:processes) {
|
||||
if (-not $p.HasExited) {
|
||||
try {
|
||||
$p.Kill($true)
|
||||
Write-Host " Stopped PID $($p.Id)" -ForegroundColor DarkGray
|
||||
} catch {
|
||||
# already exited
|
||||
}
|
||||
}
|
||||
}
|
||||
Write-Host "All services stopped." -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
# Register cleanup on script exit (Ctrl+C, terminal close)
|
||||
[Console]::TreatControlCAsInput = $false
|
||||
$null = Register-EngineEvent -SourceIdentifier PowerShell.Exiting -Action { Cleanup }
|
||||
|
||||
try {
|
||||
# --- Start Server ---
|
||||
Write-Host "Starting services:" -ForegroundColor Cyan
|
||||
Start-Proc -Name "server" -FilePath "cargo" -ArgumentList "run", "-p", "csm-server"
|
||||
|
||||
# Give server a moment to bind ports
|
||||
Start-Sleep -Milliseconds 1500
|
||||
|
||||
# --- Start Frontend ---
|
||||
Start-Proc -Name "web" -FilePath "npm" -ArgumentList "run", "dev" -WorkingDirectory "$projectRoot\web"
|
||||
|
||||
# --- Start Client ---
|
||||
if (-not $NoClient) {
|
||||
Start-Sleep -Milliseconds 500
|
||||
Start-Proc -Name "client" -FilePath "cargo" -ArgumentList "run", "-p", "csm-client"
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "--------------------------------------" -ForegroundColor Cyan
|
||||
Write-Host " Server : http://localhost:9998" -ForegroundColor White
|
||||
Write-Host " Web UI : http://localhost:9997" -ForegroundColor White
|
||||
Write-Host " TCP : localhost:9999" -ForegroundColor White
|
||||
Write-Host "--------------------------------------" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Press Ctrl+C to stop all services." -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
|
||||
# --- Wait for any process to exit ---
|
||||
$handles = $script:processes | ForEach-Object { $_.Handle }
|
||||
$index = [System.Threading.WaitHandle]::WaitAny($handles)
|
||||
|
||||
$exited = $script:processes[$index]
|
||||
$names = @("server", "web", "client")
|
||||
$name = if ($index -lt $names.Count) { $names[$index] } else { "unknown" }
|
||||
|
||||
if ($exited.ExitCode -ne 0) {
|
||||
Write-Host "[$name] exited with code $($exited.ExitCode)" -ForegroundColor Red
|
||||
}
|
||||
}
|
||||
finally {
|
||||
Cleanup
|
||||
}
|
||||
Reference in New Issue
Block a user