Em relação à hierarquia de pasta de origem, há sempre algumas características comuns, tais como o src
, doc
ou test
pastas, que têm bastante fácil de entender o conteúdo.
No entanto, percebi que os grandes projetos têm pastas a lib
e vendor
, embora eu sempre pensasse que eles eram iguais, pois seus nomes sugerem incluir “terceiros de libraries
fora vendors
”. Porém, vendo ambas no mesmo projeto significa que não é uma diferença.
Não encontrei nenhuma informação nem no Google nem em fontes como o padrão de hierarquia do sistema de arquivos , mesmo que essa seja realmente uma prática comum .
Aqui está um exemplo mais detalhado com o Symfony : depois de criar um projeto, você obtém uma lib
pasta na raiz do seu projeto. Nesta pasta, a seguinte estrutura é encontrada:
lib
+--filter
+--form
+--…
+--vendor
+--simpletest
+--symfony
Aqui, a symfony
pasta contém todo o núcleo do Symfony.
fonte
lib/vendor
outros diretóriosvendor
. E eles não são os únicos . "Todos podem selecionar qualquer estrutura de diretório" Sim, bem, obrigado. Todos podem codificar como quiserem. Se eu quiser chamarsrc
"woudzigouga", eu posso. Não estou perguntando se posso, mas por que outras pessoas sérias e conhecidas fazem algo que parece uma boa prática.lib
possui bibliotecas principais (bibliotecas absolutamente essenciais OU bibliotecas construídas com o mesmo autor da estrutura) evendor
bibliotecas de terceiros, não acho que exista outra distinção sã. Essa distinção é um pouco importante por várias razões, e faz sentido como uma prática genérica.Respostas:
Quando vejo um diretório
lib
oulibraries
, penso em:Quando vejo um
vendor
diretório, penso em:Quando vejo
lib
evendor
diretórios, penso em algumas distinções:lib
detém apenas bibliotecas,vendor
pode conter algo realmente,lib
é onde devo colocar minhas bibliotecas,vendor
onde devo colocar qualquer coisa de terceiros (incluindo código do autor original),lib
é onde as bibliotecas do autor original do projeto estão localizadas (se não sou eu), enquantovendor
que o autor original coloca algo de terceiros.lib
é licenciado sob a mesma licença que o restante do projeto.Qualquer uma das opções acima se aplica, é motivo suficiente para ter pastas diferentes. AFAIK não existe prática geralmente aceita. Algumas comunidades têm práticas comuns em toda a comunidade, mas é exatamente isso.
Quanto ao exemplo específico do Symfony: Symfony é uma estrutura e acho que o que os desenvolvedores estão tentando dizer é que, em um aplicativo Symfony, as principais bibliotecas da estrutura são código de fornecedor, ou seja, provenientes de terceiros e não do autor original do aplicativo. (você).
fonte
data
ouresources
(ou algo mais preciso ao longo das linhasimg
), IMHO. Além disso, em nosso exemplo do Symfony,vendor
na verdade , contém todo o núcleo do Symfony, portanto, a menos que eu não consiga sua denominação de "autor original", não acho que se encaixe nos seus pontos 2 e 3. #resources
ouassets
, mas, dependendo do projeto, pode fazer sentido em umvendor
diretório (eu prefiroassets
mesmo).lib
vslibs
evendor
vsvendors
?Generalizando a resposta do @ WayneM, mas não ousando editá-lo tanto.
Portanto, parece que essa estrutura pode ser observada em estruturas de aplicativos (pelo menos Rails e Symfony).
É uma maneira de manter a estrutura
lib
/src
intacta para os desenvolvedores de aplicativos, enquanto adiciona o outro nível de distância trazido pelo uso de uma estrutura: avendor
pasta realmente contém as bibliotecas da estrutura, deixando alib
pasta para as bibliotecas incluídas no aplicativo esrc
sua origem arquivos.É um "mais distante"
lib
, vital, pois sem a estrutura, o aplicativo é inútil, mas não deve ser tocado pelo desenvolvedor do aplicativo: são as bibliotecas do fornecedor da estrutura .fonte
No caso de algo como o Symfony,
lib
é o código do aplicativo (ou seja, escrito pelos desenvolvedores) evendor
é um código de terceiros. Pense nisso como lib é o quesrc
normalmente é a pasta e vendor é lib. Normalmente vejo esse estilo no PHP porque você separa os modelos html das classes reais.fonte
No guia Rails Asset Pipeline :
app/assets
destina-se a ativos pertencentes ao aplicativo, como imagens personalizadas, arquivos JavaScript ou folhas de estilo.lib/assets
é para o código de suas próprias bibliotecas que realmente não se encaixa no escopo do aplicativo ou nas bibliotecas compartilhadas entre aplicativos.vendor/assets
é para ativos pertencentes a entidades externas, como código para plug-ins JavaScript e estruturas CSS.Eu sei que essa não é uma pergunta específica do Rails, mas a explicação é boa e clara e provavelmente se estende a outras estruturas / estruturas de projeto.
fonte