Qual è la differenza tra le cartelle "lib" e "vendor"?

94

Per quanto riguarda la gerarchia delle cartelle di origine, ci sono sempre alcune funzionalità comuni, come le cartelle src , doc o test , che hanno contenuti piuttosto facili da capire.

Tuttavia, mi sono reso conto che i grandi progetti hanno sia lib che vendor cartelle, mentre io ho sempre pensato che fossero uguali, poiché i loro nomi suggeriscono di includere "% di terze parti% di% esterno da% esterno% ”. Tuttavia, vedere entrambi nello stesso progetto significa che è una differenza.

Non sono riuscito a trovare alcuna informazione né su Google né su fonti come Standard Hierarchy Filesystem , anche se questa è in realtà una pratica in qualche modo comune .

Ecco un esempio più dettagliato con Symfony : una volta creato un progetto, ottieni una cartella libraries al radice del tuo progetto. In questa cartella, viene trovata la seguente struttura:

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

Qui, la cartella vendors contiene tutto il core di Symfony.

    
posta MattiSG 05.12.2011 - 10:19
fonte

4 risposte

21

Generalizzazione della risposta di WayneM, ma non osando modificarla così tanto.

Quindi, sembra che questa struttura possa essere osservata nei framework delle applicazioni (almeno Rails e Symfony).

È un modo per mantenere intatta la struttura lib / src per gli sviluppatori di applicazioni, aggiungendo l'altro livello di distanza portato dall'utilizzo di un framework: la cartella vendor contiene effettivamente le librerie del framework, lasciando la cartella lib per le librerie incluse dell'applicazione e src per i suoi file di origine.

È un "più distante" lib , vitale poiché senza il framework, l'applicazione è inutile, ma non deve essere toccata dallo sviluppatore dell'applicazione: è la librerie del fornitore di framework .

    
risposta data 07.12.2011 - 13:06
fonte
59

Quando vedo una directory lib o libraries , penso a:

  • Librerie, non plug-in, moduli, ecc.
  • OOP anziché procedurale, dove applicabile (cioè PHP)

Quando vedo una directory vendor , penso a:

  • Librerie, plug-in, moduli, componenti, ecc. Non solo librerie, ma tutto ciò che viene fornito da una terza parte.
  • E cose che non sono codice, come un set di icone.

Quando vedo lib e vendor directory, penso ad alcune distinzioni:

  1. lib contiene solo le librerie, vendor può contenere qualsiasi cosa veramente,
  2. lib è dove dovrei mettere le mie librerie, vendor dove dovrei mettere qualcosa di terze parti (incluso il codice dell'autore originale),
  3. lib è il luogo in cui si trovano le librerie dell'autore originale del progetto (se non sono io), mentre vendor è dove l'autore originale ha inserito qualcosa di diverso.
  4. Puoi tranquillamente presumere che qualunque cosa sia in lib sia concessa sotto la stessa licenza del resto del progetto.

Qualunque delle precedenti condizioni, è una ragione sufficiente per avere cartelle diverse. AFAIK non esiste una pratica generalmente accettata. Alcune comunità hanno pratiche comuni a livello di comunità, ma questo è tutto.

Per quanto riguarda l'esempio specifico di Symfony: Symfony è un framework e penso che quello che gli sviluppatori stanno cercando di dire è che in un'applicazione Symfony le librerie principali del framework sono codice del fornitore, cioè provenienti da terze parti e non dall'autore originale dell'applicazione (voi).

    
risposta data 05.12.2011 - 12:00
fonte
10

Nel caso di qualcosa come Symfony, lib è il codice dell'applicazione (cioè scritto dagli sviluppatori) e vendor è codice di terze parti. Pensateci come la lib è ciò che normalmente è la cartella src , e il venditore è lib. Normalmente vedo lo stile in PHP perché separa i modelli html dalle classi reali.

    
risposta data 05.12.2011 - 14:16
fonte
0

Dalla guida Rails Asset Pipeline :

  • app/assets è per le risorse che appartengono all'applicazione, come immagini personalizzate, file JavaScript o fogli di stile.

  • lib/assets è per il codice della tua libreria personale che non si adatta perfettamente all'ambito dell'applicazione o a quelle librerie condivise tra le applicazioni.

  • vendor/assets è per le risorse di proprietà di entità esterne, come il codice per i plugin JavaScript e i framework CSS.

So che questa non è una domanda specifica di Rails, ma la spiegazione è buona e chiara e probabilmente si estende ad altri framework / strutture di progetto.

    
risposta data 28.06.2018 - 13:33
fonte

Leggi altre domande sui tag