it-swarm.dev

Was ist der Unterschied zwischen den Ordnern "lib" und "vendor"?

In Bezug auf die Hierarchie der Quellordner gibt es immer einige allgemeine Funktionen, z. B. die Ordner src, doc oder test, deren Inhalt leicht verständlich ist.

Ich stellte jedoch fest, dass große Projekte sowohl einen lib als auch einen vendor Ordner haben, obwohl ich immer gedacht hatte, dass sie gleich sind, da ihre Namen darauf hindeuten, dass „Drittanbieter libraries von extern vendors ”. Beide im selben Projekt zu sehen bedeutet jedoch, dass ein Unterschied ist.

Ich konnte weder bei Google noch bei Quellen wie dem Filesystem Hierarchy Standard Informationen finden, obwohl dies tatsächlich eine irgendwie übliche Praxis ist.


Hier ist ein detaillierteres Beispiel mit Symfony : Sobald Sie ein Projekt erstellt haben, erhalten Sie einen Ordner lib im Stammverzeichnis Ihres Projekts. In diesem Ordner befindet sich folgende Struktur:

lib
+--filter
+--form
+--…
+--vendor
    +--simpletest
    +--symfony

Hier enthält der Ordner symfony den gesamten Kern von Symfony.

106
MattiSG

Verallgemeinern der Antwort von @ WayneM, aber nicht gewagt, sie so stark zu bearbeiten.

Es scheint also, dass diese Struktur in Anwendungsframeworks (zumindest Rails und Symfony) beobachtet werden kann.

Auf diese Weise kann die Struktur lib/src für Anwendungsentwickler intakt bleiben, während die andere Entfernungsstufe hinzugefügt wird, die durch die Verwendung eines Frameworks erzielt wird: Der Ordner vendor enthält tatsächlich die Bibliotheken des Frameworks, wobei der Ordner lib für die enthaltenen Bibliotheken der Anwendung und src für die Quelldateien übrig bleiben.

Es ist ein "weiter entferntes" lib, wichtig, da die Anwendung ohne das Framework nutzlos ist, aber vom Entwickler der Anwendung nicht berührt werden darf: Es ist das Bibliotheken des Framework-Anbieters.

21
MattiSG

Wenn ich ein lib oder libraries Verzeichnis sehe, denke ich an:

  • Bibliotheken, keine Plugins, Module usw.
  • OOP statt prozedural, wo dies anwendbar ist (d. H. PHP)

Wenn ich ein vendor -Verzeichnis sehe, denke ich an:

  • Bibliotheken, Plugins, Module, Komponenten usw. Nicht nur Bibliotheken, sondern alles, was von Dritten bereitgestellt wird.
  • Und Dinge, die kein Code sind, wie ein Icon-Set.

Wenn ich die Verzeichnisse lib und vendor sehe, denke ich an einige Unterschiede:

  1. lib enthält nur Bibliotheken, vendor kann wirklich alles enthalten,
  2. lib ist der Ort, an dem ich meine Bibliotheken ablegen soll, vendor, an dem ich alles von Dritten ablegen soll (einschließlich Code des ursprünglichen Autors),
  3. lib ist der Ort, an dem sich Bibliotheken des ursprünglichen Autors des Projekts befinden (wenn das nicht ich bin), während vendor der Ort ist, an dem der ursprüngliche Autor irgendetwas von Dritten abgelegt hat.
  4. Sie können davon ausgehen, dass alles, was in lib enthalten ist, unter derselben Lizenz wie der Rest des Projekts lizenziert ist.

Welcher der oben genannten Punkte zutrifft, ist Grund genug, unterschiedliche Ordner zu haben. AFAIK gibt es keine allgemein anerkannte Praxis. Einige Gemeinden haben gemeinschaftsweite gängige Praktiken, aber das war es auch schon.


Was das spezifische Symfony-Beispiel betrifft: Symfony ist ein Framework, und ich denke, die Entwickler versuchen zu sagen, dass in einer Symfony-Anwendung die Kernbibliotheken des Frameworks Herstellercode sind, dh von einem Drittanbieter und nicht vom ursprünglichen Autor der Anwendung (Du).

65
yannis

Im Fall von Symfony ist lib der Anwendungscode (d. H. Von den Entwicklern geschrieben) und vendor ist Code von Drittanbietern. Stellen Sie sich vor, lib ist das, was der Ordner src normalerweise ist, und der Anbieter ist lib. Normalerweise sehe ich diesen Stil in PHP, weil Sie die HTML-Vorlagen von den tatsächlichen Klassen trennen.

10
Wayne Molina

Aus dem Rails Asset Pipeline-Handbuch :

  • app/assets ist für Assets vorgesehen, deren Eigentümer die Anwendung ist, z. B. benutzerdefinierte Bilder, JavaScript-Dateien oder Stylesheets.

  • lib/assets steht für den Code Ihrer eigenen Bibliotheken, der nicht wirklich in den Anwendungsbereich oder in die Bibliotheken passt, die von mehreren Anwendungen gemeinsam genutzt werden.

  • vendor/assets steht für Assets, deren Eigentümer externe Entitäten sind, z. B. Code für JavaScript-Plugins und CSS-Frameworks.

Ich weiß, dass dies keine Rails-spezifische Frage ist, aber die Erklärung ist gut und klar und erstreckt sich wahrscheinlich auch auf andere Frameworks/Projektstrukturen.

2
Chico Carvalho