Ich schreibe eine Anwendung und importiere ein Paket B
. Dieses Paket enthält das Verzeichnis vendor
, in dem wiederum das Paket C
enthalten ist. Ich möchte auch das Paket C
in meiner App direkt verwenden.Wie werden verschachtelte "Vendor" -Verzeichnisse in Go-Paketen behandelt?
So entschied ich mich, glide
Paketmanager zu verwenden. Er lädt sowohl B
als auch C
in das Verzeichnis myapp/vendor
herunter, behält aber myapp/vendor/B/vendor/C
bei. Also wenn ich meine App erstelle, baut sie mit zwei verschiedenen Versionen von C auf (auch mit myapp/vendor/C
).
Wie vermeide ich das?
1) Gibt es einen Paketmanager, der das erledigt? govend
scheint mit seinem --prune
Argument, aber es respektiert nicht die Versionen dieser C
Pakete.
2) Oder, wie man glide
die verschachtelten vendor
Verzeichnisse richtig behandelt?
bearbeiten
ist mein Beispiel https://github.com/orloffm/flat
. Es verwendet cat
und - indirekt - toy
Pakete. cat
hat einige ältere Version von toy
vendored und in Repository übergeben. Ich mache glide create && glide install
und am Ende mit diesem:
.
├── flat.go
├── glide.lock
├── glide.yaml
└── vendor
└── github.com
└── orloffm
├── cat
│ ├── cat.go
│ ├── vendor
│ │ └── github.com
│ │ └── orloffm
│ │ └── toy
│ │ └── toy.go
│ └── vendor.yml
└── toy
└── toy.go
Ich will nicht vendor
Verzeichnis mit toy
verschachtelt haben.
Ich benutze 'glide' gerade jetzt nicht, aber bist du sicher, dass du die neueste Version hast? Ein kurzer Blick auf die Dokumentation zeigt '' Dadurch glättet Glide den Abhängigkeitsbaum in ein einziges Top-Level-Vendor/Verzeichnis. '' – JimB
Wie JimB erklärte, flachten die meisten aktuellen Vendoring-Tools, die ich verwendet habe, automatisch den Abhängigkeitsbaum. Dies ist praktisch erforderlich, da dasselbe Paket, das aus zwei verschiedenen eindeutigen Pfaden importiert wird, tatsächlich als zwei unterschiedliche eindeutige Pakete betrachtet werden, wie Sie gefunden haben. Ich weiß, 'govendor' tut es standardmäßig. – Kaedys
@Kaedys +1 für Gouverneur. Ich habe es in einigen Projekten verwendet. – tier1