Jeśli chodzi o hierarchię folderu źródłowego, nie zawsze są pewne wspólne cechy, takie jak src
, doc
lub test
foldery, które mają dość łatwy do zrozumienia treści.
Jednak zdałem sobie sprawę, że duże projekty mają zarówno lib
i vendor
foldery, a ja zawsze myślałem, że były takie same, jak ich nazwy wskazywać na tym „innych firm libraries
z zewnętrznych vendors
”. Chociaż, widząc zarówno w tym samym projekcie oznacza, że jest różnica.
Nie mogłem znaleźć żadnych informacji ani w Google, ani w źródłach takich jak Hierarchia Standardów Systemu Plików , mimo że w rzeczywistości jest to jakoś powszechna praktyka.
Oto bardziej szczegółowy przykład z Symfony : po utworzeniu projektu otrzymujesz lib
folder w katalogu głównym projektu. W tym folderze znajduje się następująca struktura:
lib
+--filter
+--form
+--…
+--vendor
+--simpletest
+--symfony
Tutaj symfony
folder zawiera cały rdzeń Symfony.
źródło
lib/vendor
innymi katalogamivendor
. I nie są jedynymi . „Każdy może wybrać dowolną strukturę reż.” Tak, dziękuję. Każdy może kodować w dowolny sposób. Jeśli chcę nazywaćsrc
„woudzigouga”, mogę. Nie pytam, czy mogę, ale dlaczego inni poważni i znani robią coś, co wygląda na dobrą praktykę.lib
posiada biblioteki podstawowe (absolutnie niezbędne biblioteki LUB biblioteki zbudowane od tego samego autora co framework) ivendor
biblioteki zewnętrzne, nie sądzę, żeby było jakieś inne rozsądne rozróżnienie. To rozróżnienie jest nieco ważne z różnych powodów i ma sens jako ogólna praktyka.Odpowiedzi:
Kiedy widzę katalog
lib
lublibraries
, myślę o:Kiedy widzę
vendor
katalog, myślę o:Kiedy widzę
lib
ivendor
katalogi, myślę o kilku wyróżnieniach:lib
posiada tylko biblioteki,vendor
może pomieścić wszystko naprawdę,lib
tam, gdzie powinienem umieścić moje biblioteki,vendor
gdzie powinienem umieścić wszystko, co jest stronem trzecim (w tym kod oryginalnego autora),lib
to gdzie znajdują się biblioteki oryginalnego autora projektu (jeśli to nie ja), podczasvendor
gdy oryginalny autor umieszcza cokolwiek innego.lib
jest licencjonowane na tej samej licencji, co reszta projektu.Niezależnie od tego, który z powyższych warunków ma zastosowanie, jest to wystarczający powód do posiadania różnych folderów. AFAIK nie ma ogólnie przyjętej praktyki. Niektóre społeczności mają wspólne praktyki w całej społeczności, ale o to właśnie chodzi.
Jeśli chodzi o konkretny przykład Symfony: Symfony jest frameworkiem i myślę, że programiści próbują powiedzieć, że w aplikacji Symfony podstawowymi bibliotekami frameworka są kod dostawcy, tj. Pochodzący od strony trzeciej, a nie od oryginalnego autora aplikacji (ty).
źródło
data
lubresources
(lub w bardziej precyzyjny sposóbimg
) IMHO. Co więcej, w naszym przykładzie Symfonyvendor
faktycznie zawiera cały rdzeń Symfony, więc chyba, że nie otrzymam nazwy „oryginalnego autora”, nie sądzę, żeby pasowało to do twoich punktów 2 i 3.resources
lubassets
, ale w zależności od projektu może mieć sens wvendor
katalogu (assets
naprawdę wolę ).lib
vslibs
ivendor
vsvendors
?Uogólniając odpowiedź @ WayneM, ale nie odważając się na tak wiele edycji.
Wygląda więc na to, że tę strukturę można zaobserwować w ramach aplikacji (przynajmniej Rails i Symfony).
Jest to sposób na utrzymanie struktury
lib
/src
nienaruszonej dla programistów aplikacji, przy jednoczesnym dodaniu innego poziomu odległości wynikającego z użycia frameworka:vendor
folder faktycznie zawiera biblioteki frameworka, pozostawiająclib
folder dla bibliotek dołączonych do aplikacji isrc
dla jej źródła akta.Jest to „bardziej odległe”
lib
, istotne, ponieważ bez frameworka aplikacja jest bezużyteczna, ale twórca aplikacji nie może jej dotknąć: to biblioteki dostawcy frameworka .źródło
W przypadku czegoś takiego jak Symfony,
lib
jest kodem aplikacji (tj. Napisanym przez programistów) ivendor
jest kodem strony trzeciej. Pomyśl o tym, jak lib jest tym, cosrc
zwykle jest folderem, a dostawcą jest lib. Zwykle widzę ten styl w PHP, ponieważ oddzielasz szablony HTML od rzeczywistych klas.źródło
Z przewodnika po rurociągach zasobów Rails :
app/assets
dotyczy zasobów będących własnością aplikacji, takich jak niestandardowe obrazy, pliki JavaScript lub arkusze stylów.lib/assets
jest dla kodu twoich bibliotek, który tak naprawdę nie pasuje do zakresu aplikacji lub tych bibliotek, które są współużytkowane przez aplikacje.vendor/assets
dotyczy zasobów będących własnością podmiotów zewnętrznych, takich jak kod wtyczek JavaScript i frameworków CSS.Wiem, że nie jest to pytanie specyficzne dla Railsów, ale wyjaśnienie jest dobre i jasne i prawdopodobnie dotyczy innych ram / struktur projektu.
źródło