@@ -0,0 +1,71 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
$nodeDir = Join-Path $here 'node'
|
||||
$mainDir = Split-Path -Parent (Split-Path -Parent $here)
|
||||
$distDir = Join-Path $mainDir 'dist'
|
||||
|
||||
$nodeVersion = '20.18.1'
|
||||
$nodeZipName = "node-v$nodeVersion-win-x64.zip"
|
||||
$nodeUrl = "https://nodejs.org/dist/v$nodeVersion/$nodeZipName"
|
||||
$nodeExe = Join-Path $nodeDir "node-v$nodeVersion-win-x64\node.exe"
|
||||
|
||||
if (Test-Path $nodeExe) {
|
||||
Write-Host "Node.js already present at $nodeExe." -ForegroundColor Yellow
|
||||
} else {
|
||||
if (-not (Test-Path $nodeDir)) { New-Item -ItemType Directory -Path $nodeDir | Out-Null }
|
||||
$zipPath = Join-Path $nodeDir $nodeZipName
|
||||
Write-Host "Downloading Node.js $nodeVersion (~30 MB)..." -ForegroundColor Cyan
|
||||
Invoke-WebRequest -Uri $nodeUrl -OutFile $zipPath -UseBasicParsing
|
||||
Write-Host "Extracting to $nodeDir..." -ForegroundColor Cyan
|
||||
Expand-Archive -Path $zipPath -DestinationPath $nodeDir -Force
|
||||
Remove-Item $zipPath
|
||||
}
|
||||
|
||||
$nodeBinDir = Split-Path -Parent $nodeExe
|
||||
$env:PATH = "$nodeBinDir;$env:PATH"
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "node : $(& $nodeExe --version)" -ForegroundColor Green
|
||||
Write-Host "npm : $(& (Join-Path $nodeBinDir 'npm.cmd') --version)" -ForegroundColor Green
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Building Electron launcher at $mainDir..." -ForegroundColor Cyan
|
||||
Push-Location $mainDir
|
||||
try {
|
||||
if (-not (Test-Path (Join-Path $mainDir 'node_modules'))) {
|
||||
Write-Host "[npm] install --ignore-scripts (JS packages only)" -ForegroundColor Cyan
|
||||
& (Join-Path $nodeBinDir 'npm.cmd') install --ignore-scripts --no-audit --no-fund
|
||||
if ($LASTEXITCODE -ne 0) { throw "npm install failed" }
|
||||
|
||||
Write-Host "[electron] install binary" -ForegroundColor Cyan
|
||||
& $nodeExe (Join-Path $mainDir 'node_modules\electron\install.js')
|
||||
if ($LASTEXITCODE -ne 0) { throw "electron install failed" }
|
||||
|
||||
Write-Host "[electron-builder] install-app-deps (native modules)" -ForegroundColor Cyan
|
||||
& (Join-Path $mainDir 'node_modules\.bin\electron-builder.cmd') install-app-deps
|
||||
if ($LASTEXITCODE -ne 0) { throw "electron-builder install-app-deps failed" }
|
||||
} else {
|
||||
Write-Host "node_modules already exists - skipping npm install (delete it to force reinstall)." -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
Write-Host "[npm] run build (electron-vite)" -ForegroundColor Cyan
|
||||
& (Join-Path $nodeBinDir 'npm.cmd') run build
|
||||
if ($LASTEXITCODE -ne 0) { throw "npm run build failed" }
|
||||
|
||||
Write-Host "[npm] run pack (electron-builder -> dist\)" -ForegroundColor Cyan
|
||||
& (Join-Path $nodeBinDir 'npm.cmd') run pack
|
||||
if ($LASTEXITCODE -ne 0) { throw "npm run pack failed" }
|
||||
} finally {
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Done." -ForegroundColor Green
|
||||
if (Test-Path $distDir) {
|
||||
Get-ChildItem $distDir -Filter '*.exe' | ForEach-Object {
|
||||
$size = [math]::Round($_.Length / 1MB, 1)
|
||||
Write-Host " $($_.FullName) ($size MB)" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
Write-Host ""
|
||||
Reference in New Issue
Block a user