Abhangigkeitsverwaltung
Wippy verwendet ein Lock-Datei-basiertes Abhangigkeitssystem. Module werden im Hub veroffentlicht, als Abhangigkeiten in Ihrem Quellcode deklariert und in einer wippy.lock-Datei aufgelost, die exakte Versionen verfolgt.
Projektdateien
wippy.lock
Die Lock-Datei verfolgt die Verzeichnisstruktur Ihres Projekts und die fixierten Abhangigkeiten:
directories:
modules: .wippy
src: ./src
modules:
- name: acme/http
version: v1.2.0
hash: 4ea816fe84ca58a1f0869e5ca6afa93d6ddd72fa09e1162d9e600a7fbf39f0a2
- name: acme/sql
version: v2.0.1
hash: b3f9c8e12a456d7890abcdef1234567890abcdef1234567890abcdef12345678
| Feld | Beschreibung |
|---|---|
directories.modules |
Speicherort fur heruntergeladene Module (Standard: .wippy) |
directories.src |
Speicherort Ihres Quellcodes (Standard: ./src) |
modules[].name |
Modulbezeichner im Format org/module |
modules[].version |
Fixierte semantische Version |
modules[].hash |
Inhalts-Hash zur Integritatsprufung |
wippy.yaml
Modul-Metadaten fur die Veroffentlichung. Nur erforderlich, wenn Sie ein eigenes Modul veroffentlichen:
organization: acme
module: http
version: 1.2.0
description: HTTP utilities for Wippy
license: MIT
repository: https://github.com/acme/wippy-http
keywords:
- http
- web
| Feld | Erforderlich | Beschreibung |
|---|---|---|
organization |
Ja | Kleinbuchstaben, alphanumerisch mit Bindestrichen |
module |
Ja | Kleinbuchstaben, alphanumerisch mit Bindestrichen |
version |
Nein | Semantische Version (wird beim Veroffentlichen gesetzt) |
description |
Nein | Modulbeschreibung |
license |
Nein | SPDX-Lizenzbezeichner |
repository |
Nein | URL des Quell-Repositorys |
homepage |
Nein | Projekt-Homepage |
keywords |
Nein | Schlusselworter zur Auffindbarkeit |
authors |
Nein | Autorenliste |
Abhangigkeiten deklarieren
Fugen Sie ns.dependency-Eintrage in Ihrer _index.yaml hinzu:
version: "1.0"
namespace: app
entries:
- name: dependency.http
kind: ns.dependency
component: acme/http
version: "^1.0.0"
- name: dependency.sql
kind: ns.dependency
component: acme/sql
version: ">=2.0.0"
Versionsbeschrankungen
| Beschrankung | Beispiel | Trifft zu auf |
|---|---|---|
| Exakt | 1.2.3 |
Nur 1.2.3 |
| Caret | ^1.2.0 |
>=1.2.0, <2.0.0 |
| Tilde | ~1.2.0 |
>=1.2.0, <1.3.0 |
| Bereich | >=1.0.0 |
1.0.0 und hoher |
| Platzhalter | * |
Jede Version (wahlt die hochste) |
| Kombiniert | >=1.0.0 <2.0.0 |
Zwischen 1.0.0 und 2.0.0 |
Auflosungsregeln
- Jedes Modul wird gegen die Schnittmenge aller deklarierten Bereiche im Abhangigkeitsgraphen aufgelost. Inkompatible Bereiche (Diamond-Konflikte) lassen die Auflosung mit einem expliziten Fehler fehlschlagen, statt stillschweigend eine Seite zu wahlen.
- Abhangigkeiten werden aus ihren deklarierten Bereichen gelost, nicht aus zuvor aufgelosten Pins.
- Root-Deklarationen gewinnen gegen transitive: Wenn Ihre App und eine Abhangigkeit dasselbe Modul oder dieselbe Anforderung einziehen, hat Ihre Deklaration Vorrang. Ein Abhangigkeits-Eintrag mit
meta.moduleist transitiv, sofern er nicht explizit als Root markiert ist — veroffentlichte Anwendungen behalten ihre im Quellcode deklarierten Abhangigkeiten als Roots. - Dieselbe Komponente darf nur einmal als Root-Abhangigkeit deklariert werden — eine doppelte Deklaration wird mit einem Konfliktfehler abgelehnt. Aktualisieren Sie stattdessen die bestehende Abhangigkeit.
Die Runtime persistiert jeden aufgelosten Graphen in ihrer Registry-Historie und spielt ihn beim Start wieder ab, statt neu aufzulosen, sodass eine deployte Anwendung mit genau den Versionen bootet, die beim Anwenden der Abhangigkeitsanderung aufgelost wurden. wippy.lock bleibt der portable Snapshot fur Quellprojekte.
Arbeitsablauf
Neues Projekt starten
wippy init
Erstellt eine wippy.lock mit Standardverzeichnissen.
Abhangigkeiten hinzufugen
wippy add acme/http # Latest version
wippy add acme/http@1.2.3 # Exact version
wippy add acme/http@latest # Latest label
Dies aktualisiert die Lock-Datei. Dann installieren:
wippy install
Aus dem Quellcode auflosen
Wenn Ihr Quellcode bereits ns.dependency-Eintrage deklariert:
wippy update
Dies durchsucht Ihr Quellverzeichnis, lost alle Abhangigkeitsbeschrankungen auf, aktualisiert die Lock-Datei und installiert die Module.
Abhangigkeiten aktualisieren
wippy update # Re-resolve all dependencies
wippy update acme/http # Update only acme/http
wippy update acme/http acme/sql # Update specific modules
Beim Aktualisieren bestimmter Module bleiben andere Module auf ihren aktuellen Versionen fixiert. Falls die Aktualisierung Anderungen an nicht ausgewahlten Modulen erfordert, werden Sie zur Bestatigung aufgefordert.
Aus der Lock-Datei installieren
wippy install # Install all from lock
wippy install --refresh # Jedes Modul erneut herunterladen (--force und --repair sind Aliase)
Modulspeicher
Heruntergeladene Module werden im Verzeichnis .wippy/vendor/ gespeichert:
project/
wippy.lock
src/
_index.yaml
.wippy/
vendor/
acme/
http-v1.2.0.wapp
sql-v2.0.1.wapp
Standardmassig werden Module als .wapp-Dateien aufbewahrt. Um sie in Verzeichnisse zu entpacken:
# wippy.lock
options:
unpack_modules: true
Mit aktiviertem Entpacken:
.wippy/
vendor/
acme/
http/
wippy.yaml
src/
_index.yaml
...
Lokale Entwicklung mit Ersetzungen
Uberschreiben Sie Hub-Module mit lokalen Verzeichnissen fur die Entwicklung. Ersetzungen werden im workspace-Abschnitt einer Runtime-Konfigurationsdatei deklariert — typischerweise einer privaten, git-ignorierten, die auf .wippy.yaml komponiert wird:
# .wippy.workspace.yaml
version: "1.0"
workspace:
replacements:
acme/http: ../local-http
acme/sql: ../local-sql
wippy run --config .wippy.yaml --config .wippy.workspace.yaml
Schlussel sind org/module, Werte sind Verzeichnisse (relative Pfade werden gegen das Verzeichnis der ersten --config-Datei aufgelost; der Pfad muss existieren und ein Verzeichnis sein). Das Setzen einer Ersetzung auf null deaktiviert eine aus einer fruheren Konfigurationsschicht oder einem Profil geerbte Ersetzung. Ersetzungen konnen auch in einem Profil liegen, sodass sie nur mit --profile workspace aktiv werden.
Workspace-Ersetzungen wirken auf den Ladegraphen beim Start und werden nie in wippy.lock geschrieben. Anderungen an der lokalen Quelle werden direkt abgeglichen, ohne den Hub zu kontaktieren. Die exclude:-Globs aus der wippy.yaml des Moduls gelten auch fur Ersetzungsverzeichnisse, sowohl beim Laden von Eintragen als auch beim Hashen des Inhalts.
Ein replacements:-Abschnitt in wippy.lock ist veraltet: Er wird noch geladen, gibt aber eine Warnung aus. Verschieben Sie diese Eintrage nach workspace.replacements in einer Konfigurationsdatei.
Ladereihenfolge
Beim Start ladt Wippy Eintrage aus Verzeichnissen in dieser Reihenfolge:
- Quellverzeichnis (
src) - Ersetzungsverzeichnisse
- Herstellergebundene Modulverzeichnisse
Module mit aktiven Ersetzungen uberspringen ihren Vendor-Pfad.
Integritatsprufung
Jedes Modul in der Lock-Datei hat einen Inhalts-Hash. Wahrend der Installation werden heruntergeladene Module anhand ihrer erwarteten Hashes uberpruft. Module mit abweichenden Hashes werden abgelehnt und erneut aus der Registry heruntergeladen.
Siehe auch
- Komponenten bauen - Die Autorenseite:
ns.requirementund Werte viaparametersbereitstellen - CLI - Befehlsreferenz
- Veroffentlichung - Module im Hub veroffentlichen
- Projektstruktur - Projektaufbau