Im Hinblick auf Quellenordnerhierarchie, gibt es immer einige gemeinsame Merkmale, wie zum Beispiel die src
, doc
oder test
Ordner, die ziemlich einfach zu verstehen haben Inhalte.
Mir wurde jedoch klar, 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 „Dritte libraries
von außen vendors
“ eingeschlossen sind. Beide im selben Projekt zu sehen, bedeutet jedoch einen Unterschied.
Ich konnte weder auf Google noch auf Quellen wie Filesystem Hierarchy Standard Informationen finden , obwohl dies eigentlich eine übliche Praxis ist.
Im Folgenden finden Sie ein ausführlicheres Beispiel für Symfony : Sobald Sie ein Projekt erstellt haben, erhalten Sie einen lib
Ordner im Stammverzeichnis Ihres Projekts. In diesem Ordner befindet sich folgende Struktur:
lib
+--filter
+--form
+--…
+--vendor
+--simpletest
+--symfony
Hier symfony
enthält der Ordner den gesamten Kern von Symfony.
quelle
lib/vendor
andere Verzeichnisse findenvendor
. Und sie sind nicht die einzigen . "Jeder kann eine beliebige Verzeichnisstruktur auswählen" Ja, danke. Jeder kann programmieren, wie er will. Wenn ichsrc
"Woudzigouga" nennen möchte, kann ich. Ich frage nicht, ob ich kann, sondern warum andere, die ernst und bekannt sind, etwas tun, das wie eine gute Praxis aussieht.lib
Kernbibliotheken enthält (absolut notwendige Bibliotheken ODER Bibliotheken, die vom selben Autor wie das Framework erstellt wurden) undvendor
Bibliotheken von Drittanbietern, glaube ich, gibt es keinen anderen vernünftigen Unterschied. Diese Unterscheidung ist aus verschiedenen Gründen etwas wichtig und als generische Praxis sinnvoll.Antworten:
Wenn ich ein
lib
oder einlibraries
Verzeichnis sehe, denke ich an:Wenn ich ein
vendor
Verzeichnis sehe, denke ich an:Wenn ich sehe ,
lib
undvendor
Verzeichnisse, denke ich an ein paar Unterschiede:lib
hält nur Bibliotheken,vendor
kann alles wirklich halten,lib
ist der Ort, an dem ich meine Bibliotheken ablegen soll, anvendor
dem ich irgendetwas von Dritten ablegen soll (einschließlich Code des ursprünglichen Autors),lib
Hier befinden sich Bibliotheken des ursprünglichen Autors des Projekts (wenn das nicht ich bin), wohingegenvendor
der ursprüngliche Autor alles an Dritte weitergibt.lib
diesem Projekt befindet, unter derselben Lizenz wie der Rest des Projekts lizenziert ist.Unabhängig davon, welcher der oben genannten Punkte zutrifft, ist Grund genug, unterschiedliche Ordner zu haben. AFAIK gibt es keine allgemein anerkannte Praxis. Einige Gemeinden haben gemeinnützige Praktiken, aber das ist genau das Richtige.
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 stammen und nicht vom ursprünglichen Autor der Anwendung (Sie).
quelle
data
oderresources
(oder etwas genaueres im Sinne vonimg
), IMHO. Darüber hinausvendor
enthält unser Symfony-Beispiel tatsächlich den gesamten Symfony-Kern. Wenn ich also nicht die Bezeichnung Ihres „ursprünglichen Autors“ erhalte, glaube ich nicht, dass dies zu Ihren Punkten 2 und 3 passt.resources
oder einemassets
Verzeichnis befinden, aber je nach Projekt kann es in einemvendor
Verzeichnis sinnvoll sein (ich bevorzuge esassets
wirklich).lib
vslibs
undvendor
vsvendors
?Verallgemeinern Sie die Antwort von @ WayneM, aber trauen Sie sich nicht, sie so sehr zu bearbeiten.
Es scheint also, dass diese Struktur in Anwendungsframeworks (zumindest Rails und Symfony) beobachtet werden kann.
Für Anwendungsentwickler ist dies eine Möglichkeit, die
lib
/src
-Struktur intakt zu halten , während gleichzeitig die andere Entfernungsebene hinzugefügt wird, die durch die Verwendung eines Frameworks entsteht: Dervendor
Ordner enthält tatsächlich die Bibliotheken des Frameworks, und derlib
Ordner verbleibt für die enthaltenen Bibliotheken der Anwendung undsrc
für die Quelle Dateien.Es ist ein "entfernteres"
lib
, entscheidendes Element, da die Anwendung ohne das Framework nutzlos ist, aber vom Anwendungsentwickler nicht berührt werden darf: Es handelt sich um die Bibliotheken des Framework-Anbieters .quelle
Bei Symfony
lib
handelt es sich um den Anwendungscode (dh von den Entwicklern geschrieben) undvendor
um Code von Drittanbietern. Stellen Sie es sich so vor, als wäre lib das, was dersrc
Ordner normalerweise ist, und der Hersteller ist lib. Normalerweise sehe ich diesen Stil in PHP, weil Sie die HTML-Vorlagen von den tatsächlichen Klassen trennen.quelle
Aus dem Rails Asset Pipeline-Handbuch :
app/assets
Dies gilt für Assets, deren Eigentümer die Anwendung ist, z. B. benutzerdefinierte Bilder, JavaScript-Dateien oder Stylesheets.lib/assets
ist für den Code Ihrer eigenen Bibliotheken gedacht, der nicht wirklich in den Anwendungsbereich oder die Bibliotheken passt, die von mehreren Anwendungen gemeinsam genutzt werden.vendor/assets
Dies gilt 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.
quelle