Vex-Paketmanager
Beschreibt manifest-basierte Wave-Projekte, Git·Pfadabhängigkeiten, lockfile, Offline-Builds und wavec-Grenzen.
Wave Foundation
Rolle
Vex ist der Paketmanager und Build-Tool für Wave. Vex arbeitet zusätzlich zu wavec. Vex ist für die Projektstruktur und Abhängigkeitsanalyse verantwortlich und wavec ist für Compiler-Flags und Kompilierungspipeline verantwortlich.
Der Befehl Vex basiert auf manifest. vex build, vex check und vex run erhalten absichtlich nicht die Flagge raw wavec.
Erstellen Sie ein Paket
vex init
vex init --lib
Die Anwendung verwendet src/main.wave und die Bibliothek verwendet src/lib.wave. Die Paketstammstruktur ist wie folgt:
my_project/
├── src/
│ └── main.wave
├── vex.ws
├── vex.lock
└── .vex/
└── deps/
vex.ws wird zu manifest. Vex verwendet manifest nicht in der Erweiterung .wson.
{
name = "my_project",
version = 0.1.0,
lib = false,
description = "my_project Project",
author = "unknown",
license = "Unknown",
dependencies = []
}
Build-Befehl
vex build [--target <triple>] [--release] [--dry-run] [--locked] [--offline]
vex check [--target <triple>] [--release] [--dry-run] [--locked] [--offline]
vex run [--target <triple>] [--release] [--dry-run] [--locked] [--offline] [-- <args...>]
Die Optionen für Vex sind klein gehalten. Wenn Sie eine vom Compiler abhängige Steuerung benötigen, z. B. emit, linker, CPU, ABI oder debug, verwenden Sie wavec direkt. Wenn Sie einen bestimmten Compiler verwenden müssen, legen Sie VEX_WAVEC=/path/to/wavec fest.
Fortschrittsschritte wie Resolving, Fetching, Compiling, Checking, Running, Finished werden in stderr ausgegeben und die Programmausgabe wird unter beibehalten stdout.
Git Zentrale Abhängigkeit
Vex Abhängigkeiten werden als lokale path oder Git URL angegeben. Eine Abhängigkeit kann nur eine der beiden Methoden verwenden.
{
name = "app",
version = 0.1.0,
dependencies = [
{ name = "local_math", path = "../local_math" },
{ name = "remote_math", git = "https://github.com/example/math.git", tag = "v0.1.0" }
]
}
Die Git-Abhängigkeit kann höchstens eines von branch, tag oder rev angeben. Jeder Abhängigkeitsstamm muss seinen eigenen vex.ws haben. Vex löst die Abhängigkeit manifest rekursiv auf, weist widersprüchliche Paketidentitäten zurück und speichert die verwalteten Git checkout in .vex/deps/<name>.
lockfile Vertrag
Das Schema v2 vex.lock zeichnet den gesamten transitiven Abhängigkeitsgraphen und den genauen Git commit auf. Commit mit manifest. Wenn Sie dasselbe manifest und ein gültiges lockfile verwenden, wird dasselbe Abhängigkeitsdiagramm ausgewählt, ohne erneut branch oder tag zu folgen.
Befehle, die Abhängigkeiten erfordern, werden automatisch interpretiert und können mit den folgenden Befehlen vorab vorbereitet werden.
vex fetch
vex update
vex update math shared_core
vex update aktualisiert alle Git Pakete oder nur die angegebenen Pakete und betroffenen Übergangsdiagramme. Bei nicht verwandten gesperrten Paketen bleibt commit ausgewählt.
locked und offline Arbeitsablauf
--locked verbietet die Erstellung und Änderung von vex.lock. Es schlägt fehl, wenn die Datei nicht existiert, ein nicht unterstütztes Schema hat oder nicht mit dem Diagramm manifest übereinstimmt. commit ist bereits an lockfile angeheftet und kann bei Bedarf importiert werden.
--offline verbietet alle Git Netzwerkoperationen. Die erforderlichen checkout und commit sollten bereits lokal vorhanden sein.
vex fetch --locked
vex build --locked --offline
Bei diesen beiden Befehlen handelt es sich um einen strengen CI-Workflow. Bereiten Sie ein gesperrtes commit genau dann vor, wenn das Netzwerk verfügbar ist, und kompilieren Sie es dann, ohne das Netzwerk oder lockfile zu ändern. dry-run importiert keine Abhängigkeiten und schreibt lockfile nicht neu.
Compiler-Einstellungen und Informationen
vex info
vex setup wavec
vex setup wavec --version <version>
vex --version
Vex validiert das Schema wavec dry-run JSON vor dem eigentlichen Build. Compiler, die das erforderliche Schema nicht implementieren, werden mit einem unbekannten Plan nicht ausgeführt und lehnen ihn mit einem Kompatibilitätsfehler ab.