Con respecto a la jerarquía de carpetas de origen, siempre hay algunas características comunes, tales como el src
, doc
o test
carpetas, que tienen bastante fácil de entender el contenido.
Sin embargo, me di cuenta de que los grandes proyectos tienen tanto una lib
y vendor
carpetas, mientras que yo siempre había pensado que eran los mismos, como sus nombres hacen alusión a que incluye “terceros libraries
desde el exterior vendors
”. Sin embargo, al ver tanto en el mismo proyecto significa que no es una diferencia.
No pude encontrar ninguna información ni en Google ni en fuentes como el Estándar de Jerarquía del Sistema de Archivos , a pesar de que esta es una práctica común de alguna manera .
Aquí hay un ejemplo más detallado con Symfony : una vez que crea un proyecto, obtiene una lib
carpeta en la raíz de su proyecto. En esta carpeta, se encuentra la siguiente estructura:
lib
+--filter
+--form
+--…
+--vendor
+--simpletest
+--symfony
Aquí, la symfony
carpeta contiene todo el núcleo de Symfony.
fuente
lib/vendor
otros directoriosvendor
. Y no son los únicos . "Todos pueden seleccionar cualquier estructura de directorio" Sí, bueno, gracias. Todos pueden codificar como quieran. Si quiero llamarsrc
"woudzigouga", puedo hacerlo. No estoy preguntando si puedo, sino por qué otros que son serios y conocidos hacen algo que parece una buena práctica.lib
contiene bibliotecas centrales (bibliotecas absolutamente esenciales O bibliotecas construidas del mismo autor que el marco) yvendor
contiene bibliotecas de terceros, no creo que haya otra distinción sensata. Esa distinción es algo importante por una variedad de razones, y tiene sentido como práctica genérica.Respuestas:
Cuando veo un directorio
lib
olibraries
, pienso en:Cuando veo un
vendor
directorio, pienso en:Cuando veo
lib
yvendor
directorios, pienso en algunas distinciones:lib
solo contiene bibliotecas,vendor
puede contener cualquier cosa realmente,lib
es donde debería poner mis bibliotecas,vendor
donde debería poner cualquier cosa de terceros (incluido el código del autor original),lib
es donde se encuentran las bibliotecas del autor original del proyecto (si ese no soy yo), mientras quevendor
es donde el autor original pone algo de terceros.lib
tiene licencia bajo la misma licencia que el resto del proyecto.Cualquiera de los anteriores aplica, es razón suficiente para tener diferentes carpetas. AFAIK no existe una práctica generalmente aceptada. Algunas comunidades tienen prácticas comunes en toda la comunidad, pero eso es todo.
En cuanto al ejemplo específico de Symfony: Symfony es un marco y creo que lo que los desarrolladores intentan decir es que en una aplicación Symfony las bibliotecas centrales del marco son código de proveedor, es decir, provienen de un tercero y no del autor original de la aplicación. (tú).
fuente
data
oresources
(o algo más preciso en la línea deimg
), en mi humilde opinión. Además, en nuestro ejemplo de Symfony, envendor
realidad contiene todo el núcleo de Symfony, así que a menos que no obtenga su denominación de "autor original", no creo que se ajuste a sus puntos 2 y 3.resources
oassets
, pero dependiendo del proyecto podría tener sentido en unvendor
directorio (prefieroassets
realmente).lib
vslibs
yvendor
vsvendors
?Generalizando la respuesta de @ WayneM pero sin atreverse a editarla tanto.
Entonces, parece que esta estructura se puede observar en los marcos de aplicación (Rails y Symfony al menos).
Es una forma de mantener intacta la estructura
lib
/src
para los desarrolladores de aplicaciones, al tiempo que agrega el otro nivel de distancia que brinda el uso de un marco: lavendor
carpeta en realidad contiene las bibliotecas del marco, dejando lalib
carpeta para las bibliotecas incluidas de la aplicación ysrc
para su fuente archivos.Es un "más distante"
lib
, vital ya que sin el marco, la aplicación es inútil, pero no debe ser tocada por el desarrollador de la aplicación: son las bibliotecas del proveedor del marco .fuente
En el caso de algo como Symfony,
lib
es el código de la aplicación (es decir, escrito por los desarrolladores) yvendor
es un código de terceros. Piense en ello como lib es lo quesrc
normalmente es la carpeta, y el proveedor es lib. Normalmente veo ese estilo en PHP porque separas las plantillas html de las clases reales.fuente
De la guía Rails Asset Pipeline :
app/assets
es para los activos que son propiedad de la aplicación, como imágenes personalizadas, archivos JavaScript u hojas de estilo.lib/assets
es para el código de sus propias bibliotecas que realmente no se ajusta al alcance de la aplicación o las bibliotecas que se comparten entre las aplicaciones.vendor/assets
es para activos que son propiedad de entidades externas, como el código para complementos de JavaScript y marcos CSS.Sé que esta no es una pregunta específica de Rails, pero la explicación es buena y clara y probablemente se extiende a otros marcos / estructuras de proyectos.
fuente