Что касается иерархии исходных папок, всегда есть некоторые общие функции, такие как src
, doc
или test
папки, которые имеют довольно простое для понимания содержимое.
Тем не менее, я понял, что в больших проектах есть lib
и vendor
папки, и папки, хотя я всегда думал, что они одинаковы, поскольку их названия намекают на то, что они «сторонние libraries
из внешних vendors
». Хотя, видеть оба в одном и том же проекте значит, что есть разница.
Я не смог найти никакой информации ни о Google, ни о таких источниках, как Стандарт иерархии файловых систем , хотя это на самом деле довольно распространенная практика.
Вот более подробный пример с Symfony : после создания проекта вы получаете lib
папку в корне вашего проекта. В этой папке находится следующая структура:
lib
+--filter
+--form
+--…
+--vendor
+--simpletest
+--symfony
Здесь symfony
папка содержит все ядро Symfony.
источник
lib/vendor
и другие каталогиvendor
. И они не единственные . «Каждый может выбрать любую структуру режиссера » Да, хорошо, спасибо. Каждый может писать код так, как хочет. Если я хочу назватьsrc
«woudzigouga», я могу. Я не спрашиваю, могу ли я, но почему другие серьезные и известные люди делают что-то, что выглядит как хорошая практика.lib
содержит основные библиотеки (абсолютно необходимые библиотеки ИЛИ библиотеки, созданные от того же автора, что и фреймворк) иvendor
содержит сторонние библиотеки, я не думаю, что есть какое-то иное вменяемое различие. Это различие несколько важно по ряду причин, и оно имеет смысл как общая практика.Ответы:
Когда я вижу каталог
lib
илиlibraries
, я думаю о:Когда я вижу
vendor
каталог, я думаю о:Когда я вижу
lib
иvendor
каталоги, я думаю о нескольких различиях:lib
содержит только библиотеки,vendor
может содержать что угодноlib
где я должен поместить свои библиотеки,vendor
куда я должен поместить что-либо третье лицо (включая код оригинального автора),lib
где находятся библиотеки автора оригинального проекта (если это не я), тогдаvendor
как автор оригинала помещает что-либо третьему лицу.lib
, лицензируется по той же лицензии, что и остальная часть проекта.Независимо от того, что из перечисленного выше применимо, достаточно иметь разные папки. AFAIK нет общепринятой практики. В некоторых сообществах распространены общие практики, но это все.
Что касается конкретного примера Symfony: Symfony - это фреймворк, и я думаю, что разработчики пытаются сказать, что в приложении Symfony основные библиотеки фреймворка представляют собой код поставщика, то есть исходящий от третьей стороны, а не от первоначального автора приложения. (вы).
источник
data
илиresources
(или что-то более точное по линииimg
), ИМХО. Более того, в нашем примере Symfonyvendor
фактически содержит все ядро Symfony, поэтому, если я не получу ваше наименование «оригинальный автор», я не думаю, что это соответствует вашим пунктам 2 и 3.resources
илиassets
, но в зависимости от проекта это может иметь смысл вvendor
каталоге (яassets
действительно предпочитаю ).lib
противlibs
иvendor
противvendors
?Обобщая ответ @ WayneM, не осмеливаясь так сильно его редактировать.
Таким образом, кажется, что такую структуру можно наблюдать в каркасах приложений (по крайней мере, Rails и Symfony).
Это способ сохранить
lib
/src
структуру без изменений для разработчиков приложений, добавив при этом другой уровень расстояния , обеспечиваемый использованием инфраструктуры:vendor
папка фактически содержит библиотеки платформы, оставляяlib
папку для включенных библиотек приложения иsrc
для его источника файлы.Это «более отдаленное»
lib
, жизненно важное значение, поскольку без фреймворка приложение бесполезно, но разработчик приложения не должен его трогать: это библиотеки вендора фреймворка .источник
В случае чего-то вроде Symfony,
lib
это код приложения (то есть написанный разработчиками) иvendor
сторонний код. Думайте об этом как о том, чтоsrc
папка lib - это обычно папка, а vendor - lib. Я обычно вижу этот стиль в PHP, потому что вы отделяете HTML-шаблоны от реальных классов.источник
Из руководства Rails Asset Pipeline :
app/assets
предназначен для активов, которые принадлежат приложению, таких как пользовательские изображения, файлы JavaScript или таблицы стилей.lib/assets
предназначен для кода ваших собственных библиотек, который на самом деле не вписывается в сферу применения или тех библиотек, которые совместно используются приложениямиvendor/assets
предназначен для активов, которые принадлежат сторонним объектам, таким как код для плагинов JavaScript и CSS-фреймворки.Я знаю, что это не специфичный для Rails вопрос, но объяснение хорошее и ясное и, вероятно, распространяется на другие фреймворки / структуры проекта.
источник