Build- und Abhängigkeitsvertrag
Kanonischer Build-Vertrag für Wippy-Projekte
In einem Wippy-Anwendungs- oder Modul-Repository, das von wippy.exe gestartet
wird, rufen Sie das Make-Target des Repositories auf. Führen Sie keine
Paketmanager- oder Vite-Build-Kommandos direkt aus.
Das Makefile-Rezept für jedes Produktions-Frontend-Target verwendet:
npm run build -- --outDir <target> --emptyOutDir
Der Deployment-Build besitzt <target>. vite.config.ts darf kein
Deployment-Ausgabeverzeichnis fest verdrahten.
Plattform- bzw. Package-Quell-Repositories, die nicht von wippy.exe gestartet
werden, etwa die Web-Host-Quellen, verwenden exakt die Skripte und Argumente,
die die package.json des jeweiligen Repositories deklariert. Das
Wippy-Modul-Rezept --outDir <target> --emptyOutDir gilt nicht für
Package-Quell-Repositories, sofern deren eigenes deklariertes Skript diese
Argumente nicht ausdrücklich dokumentiert.
Makefile
FRONTEND_OUTPUT := $(abspath app/src/app/static/example)
.PHONY: frontend-example
frontend-example:
cd frontend/example && npm run build -- --outDir "$(FRONTEND_OUTPUT)" --emptyOutDir
make.ps1
Windows-Benutzer rufen das passende Target über make.bat auf. make.ps1
implementiert das Makefile-Target für Windows; es ist keine separate
öffentliche Build-Schnittstelle.
param(
[Parameter(Position = 0)]
[string]$Target = "help"
)
$ErrorActionPreference = "Stop"
$targets = @("frontend-example")
if ($Target -notin $targets) {
throw "Unknown target '$Target'. Available targets: $($targets -join ', ')"
}
$Output = "app/src/app/static/example"
$resolvedOutput = [System.IO.Path]::GetFullPath(
[System.IO.Path]::Combine($PSScriptRoot, $Output)
)
Push-Location (Join-Path $PSScriptRoot "frontend/example")
try {
npm.cmd run build -- --outDir $resolvedOutput --emptyOutDir
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
}
finally {
Pop-Location
}
make.bat
make.bat delegiert lediglich an sein PowerShell-Gegenstück, reicht Argumente weiter und gibt dessen Exit-Code zurück.
Für das Beispiel-Target führen Windows-Benutzer make.bat frontend-example aus.
@powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%~dp0make.ps1" %*
@exit /b %ERRORLEVEL%
Algorithmus für den Import-Map-Snapshot
Das Ziel-Release des Web Hosts definiert die vom Host bereitgestellten Module.
- Lösen Sie das Release-Tag des Ziel-Web-Hosts auf.
- Holen Sie
https://web-host.wippy.ai/<release-tag>/import-map.jsoneinmalig während der Entwicklung. - Speichern Sie das Release-Tag, die exakt aufgelöste URL, das vollständige
imports-Objekt und den kleingeschriebenen SHA-256 der exakt geholten Import-Map-Payload-Bytes. - Externalisieren Sie jeden Key in diesem
imports-Objekt. - Verwenden Sie denselben vollständigen Snapshot für den Host-less-Modus.
- Holen Sie ihn erneut, wenn sich das Host-Release ändert oder wenn eine neu hinzugefügte Abhängigkeit nun vom Host bereitgestellt sein könnte.
- Prüfen Sie die Build-Ausgabe und weisen Sie Bare Imports zurück, die im Snapshot fehlen.
Pflegen Sie keine handgeschriebene Paketliste. Spiegeln Sie nicht die vollständige Externals-Menge in die Peer Dependencies.
import hostImportMap from './wippy-import-map.json'
export default {
build: {
rollupOptions: {
external: Object.keys(hostImportMap.imports),
},
},
}
Der Snapshot muss seine Herkunft und seinen Hash enthalten. Eine Abhängigkeit, die im Snapshot fehlt, wird gebundelt, sofern keine andere dokumentierte Build-Regel greift.
Für Web Host 1.0.56 ist die kanonische URL
https://web-host.wippy.ai/webcomponents-1.0.56/import-map.json. Ersetzen Sie
sie nicht durch eine lokale Anwendungs-URL, latest oder eine rekonstruierte Liste.