Con respecto a la jerarquía de carpetas de origen, siempre hay algunas características comunes, tales como el src, doco testcarpetas, que tienen bastante fácil de entender el contenido.
Sin embargo, me di cuenta de que los grandes proyectos tienen tanto una liby vendorcarpetas, mientras que yo siempre había pensado que eran los mismos, como sus nombres hacen alusión a que incluye “terceros librariesdesde 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 libcarpeta en la raíz de su proyecto. En esta carpeta, se encuentra la siguiente estructura:
lib
+--filter
+--form
+--…
+--vendor
+--simpletest
+--symfony
Aquí, la symfonycarpeta contiene todo el núcleo de Symfony.
fuente

lib/vendorotros 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.libcontiene bibliotecas centrales (bibliotecas absolutamente esenciales O bibliotecas construidas del mismo autor que el marco) yvendorcontiene 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
libolibraries, pienso en:Cuando veo un
vendordirectorio, pienso en:Cuando veo
libyvendordirectorios, pienso en algunas distinciones:libsolo contiene bibliotecas,vendorpuede contener cualquier cosa realmente,libes donde debería poner mis bibliotecas,vendordonde debería poner cualquier cosa de terceros (incluido el código del autor original),libes donde se encuentran las bibliotecas del autor original del proyecto (si ese no soy yo), mientras quevendores donde el autor original pone algo de terceros.libtiene 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
dataoresources(o algo más preciso en la línea deimg), en mi humilde opinión. Además, en nuestro ejemplo de Symfony, envendorrealidad 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.resourcesoassets, pero dependiendo del proyecto podría tener sentido en unvendordirectorio (prefieroassetsrealmente).libvslibsyvendorvsvendors?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/srcpara los desarrolladores de aplicaciones, al tiempo que agrega el otro nivel de distancia que brinda el uso de un marco: lavendorcarpeta en realidad contiene las bibliotecas del marco, dejando lalibcarpeta para las bibliotecas incluidas de la aplicación ysrcpara 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,
libes el código de la aplicación (es decir, escrito por los desarrolladores) yvendores un código de terceros. Piense en ello como lib es lo quesrcnormalmente 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/assetses para los activos que son propiedad de la aplicación, como imágenes personalizadas, archivos JavaScript u hojas de estilo.lib/assetses 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/assetses 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