param( [string]$NodePath = "C:\Users\ruixininfo\AppData\Local\nodejs\npm.cmd" ) $ErrorActionPreference = "Stop" $root = Resolve-Path (Join-Path $PSScriptRoot "..") $backend = Join-Path $root "backend" $pcAdmin = Join-Path $root "pc-admin" $release = Join-Path $root "release" $serverPackage = Join-Path $release "server" $pcStatic = Join-Path $serverPackage "public\pc-admin" $serverPackageFull = [System.IO.Path]::GetFullPath($serverPackage) $releaseFull = [System.IO.Path]::GetFullPath($release) if (-not $serverPackageFull.StartsWith($releaseFull, [System.StringComparison]::OrdinalIgnoreCase)) { throw "Refusing to clean package path outside release directory: $serverPackageFull" } if (Test-Path $serverPackage) { Remove-Item -LiteralPath $serverPackage -Recurse -Force } New-Item -ItemType Directory -Force -Path $pcStatic | Out-Null Push-Location $pcAdmin try { & $NodePath run build } finally { Pop-Location } Copy-Item -Path (Join-Path $backend "src") -Destination (Join-Path $serverPackage "src") -Recurse Copy-Item -Path (Join-Path $backend "sql") -Destination (Join-Path $serverPackage "sql") -Recurse Copy-Item -Path (Join-Path $backend "package.json") -Destination $serverPackage Copy-Item -Path (Join-Path $backend "package-lock.json") -Destination $serverPackage Copy-Item -Path (Join-Path $backend ".env.example") -Destination $serverPackage Copy-Item -Path (Join-Path $pcAdmin "dist\*") -Destination $pcStatic -Recurse $uploads = Join-Path $serverPackage "uploads" New-Item -ItemType Directory -Force -Path $uploads | Out-Null Write-Host "Server package ready:" $serverPackage Write-Host "Upload this directory, then run npm ci --omit=dev and npm start on the server."