¿Cuál es la diferencia entre las carpetas "lib" y "proveedor"?

94

Con respecto a la jerarquía de carpetas de origen, siempre hay algunas características comunes, como las carpetas src , doc o test , que tienen contenidos bastante fáciles de entender.

Sin embargo, me di cuenta de que los grandes proyectos tienen carpetas tanto lib como vendor , mientras que siempre pensé que eran los mismos, ya que sus nombres sugieren que se incluya "terceros libraries de external vendors ". Sin embargo, ver ambos en el mismo proyecto significa que hay una diferencia.

No pude encontrar ninguna información ni en Google ni en fuentes como Estándar de Jerarquía del Sistema de Archivos , a pesar de que en realidad es una práctica de alguna manera común . / p>

Aquí hay un ejemplo más detallado con Symfony : una vez que creas un proyecto, obtienes una carpeta lib en raíz de tu proyecto. En esta carpeta, se encuentra la siguiente estructura:

lib
+--filter
+--form
+--…
+--vendor
    +--simpletest
    +--symfony

Aquí, la carpeta symfony contiene todo el núcleo de Symfony.

    
pregunta MattiSG 05.12.2011 - 10:19

4 respuestas

21

Generalizando la respuesta de @ WayneM pero sin atreverse a editarla tanto.

Por lo tanto, parece que esta estructura se puede observar en los marcos de aplicaciones (Rails y Symfony al menos).

Es una forma de mantener intacta la estructura lib / src para los desarrolladores de aplicaciones, al tiempo que se agrega el otro nivel de distancia generado por el uso de un marco: la carpeta vendor en realidad contiene las bibliotecas del marco, dejando la carpeta lib para las bibliotecas incluidas de la aplicación y src para sus archivos fuente.

Es un lib "más distante", 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 .

    
respondido por el MattiSG 07.12.2011 - 13:06
59

Cuando veo un directorio lib o libraries , pienso en:

  • Bibliotecas, no complementos, módulos, etc.
  • POO en lugar de procedimiento, cuando sea aplicable (es decir, PHP)

Cuando veo un directorio vendor , pienso en:

  • Bibliotecas, complementos, módulos, componentes, etc. No solo bibliotecas, sino todo lo que sea proporcionado por un tercero.
  • Y cosas que no son códigos, como un conjunto de iconos.

Cuando veo los directorios lib y vendor , pienso en algunas distinciones:

  1. lib tiene solo bibliotecas, vendor puede tener algo realmente,
  2. lib es donde debería colocar mis bibliotecas, vendor donde debería colocar cualquier tercero (incluido el código del autor original),
  3. lib es donde se ubican las bibliotecas del autor original del proyecto (si ese no es yo), mientras que vendor es donde el autor original puso cualquier cosa de terceros.
  4. Puede asumir con seguridad que todo lo que está en lib tiene licencia bajo la misma licencia que el resto del proyecto.

Cualquiera de las opciones anteriores, es razón suficiente para tener carpetas diferentes. AFAIK no hay 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 de Symfony las bibliotecas principales del marco son códigos de proveedores, es decir, que provienen de un tercero y no del autor original. de la aplicación (usted).

    
respondido por el yannis 05.12.2011 - 12:00
10

En el caso de algo como Symfony, lib es el código de la aplicación (es decir, escrito por los desarrolladores) y vendor es el código de terceros. Piense que lib es lo que normalmente es la carpeta src , y el proveedor es lib. Normalmente veo ese estilo en PHP porque separas las plantillas html de las clases reales.

    
respondido por el Wayne Molina 05.12.2011 - 14:16
0

De la Guía de la canalización de activos de Rails :

  • app/assets es para activos que son propiedad de la aplicación, como imágenes personalizadas, archivos JavaScript o 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 aplicaciones.

  • vendor/assets es para activos que son propiedad de entidades externas, como el código para complementos de JavaScript y marcos de CSS.

Sé que esta no es una pregunta específica de Rails, pero la explicación es buena y clara y probablemente se extienda a otros marcos / estructuras de proyectos.

    
respondido por el Chico Carvalho 28.06.2018 - 13:33

Lea otras preguntas en las etiquetas