Non sono sicuro al 100% degli aspetti positivi. Ecco alcuni aspetti negativi
Spesso si finisce per aggiungere dipendenze a server / endpoint di terze parti che potrebbero non essere stabili.
Ho avuto per caso con Bower che il repository di alcune dipendenze è stato eliminato o spostato. Quindi arriva un nuovo sviluppatore, clona il mio repository, digita bower install
e ottiene errori per repository
non accessibili. Se invece avessi registrato il codice di terze parti nel mio repository quel problema scompare.
Questo è risolto come suggerisce l'OP se stai estraendo deps da copie conservate su un server che esegui.
Più duro per i noobs.
Lavoro con studenti d'arte con pochissima esperienza nella riga di comando. Fanno arte con Processing, Arduino, Unity3D e cavarsela con pochissime conoscenze tecniche. Volevano usare un po 'di HTML5 / JavaScript che ho scritto. Passi a causa del pergolato
- Scarica Zip di repository da github (nota che si trova sulla destra di ogni repository su github. Perché non conoscono git)
- Scarica e installa nodo (in modo da poter eseguire npm per installare bower)
- Installa git o msysgit (perché Bower lo richiede e non è installato sui computer di molti studenti)
- Installa bower (
npm install -g bower
)
bower install
(finalmente per ottenere le nostre dipendenze)
I passaggi 2-5 possono essere tutti eliminati se eseguiamo semplicemente il check-in dei file nel nostro repository github. Quei passaggi probabilmente suoneranno super facili per te e per me. Per gli studenti erano molto confusi e volevano sapere quali erano tutti i passaggi dove e cosa erano per i quali potrebbe essere un buon apprendimento possibilmente, ma era del tutto ortogonale all'argomento della classe e quindi probabilmente rapidamente dimenticato.
Aggiunge un altro passo quando si tira.
È successo molte volte che eseguo un git pull origin master
test, quindi collaudo il mio codice e ci vogliono dai 5 ai 10 minuti per ricordare che ho bisogno di digitare bower install
per ottenere gli ultimi aggiornamenti. Sono sicuro che è facilmente risolvibile con un po 'di hook di script pull.
Rende più difficile la ramificazione del git
Se 2 rami hanno profondità diverse, sei un po 'avvitato. Suppongo che tu possa digitare bower install
dopo ogni git checkout
. Questo per quanto riguarda la velocità.
Per quanto riguarda i tuoi aspetti positivi, penso che ci siano contro esempi per ognuno di questi
Facilita il processo di distribuzione e importazione di moduli condivisi, in particolare gli aggiornamenti di versione.
vs cosa? Non è certamente più facile da distribuire. Tirare un repository invece di 20 non è più facile ed è più probabile che fallisca. Vedi # 1 sopra
Rimuove i moduli condivisi dal controllo del codice sorgente, velocizzando e semplificando i checkout / check-in (quando si hanno applicazioni con oltre 20 librerie questo è un fattore reale).
Viceversa significa che dipendi dagli altri per le correzioni. Significa che se i tuoi deps provengono da una fonte di terze parti e hai bisogno di un bug corretto devi aspettare che applichino la tua patch. Peggio ancora, probabilmente non puoi semplicemente prendere la versione che desideri più la tua patch, dovresti prendere le ultime che potrebbero non essere retrocompatibili con il tuo progetto.
Puoi risolverlo clonando i loro repository separatamente e quindi indirizzi i deps del tuo progetto alle tue copie. Quindi applichi eventuali correzioni alle tue copie. Ovviamente potresti farlo anche se copi la fonte nel tuo repository
Consente un maggiore controllo o consapevolezza di quali librerie di terze parti vengono utilizzate nella propria organizzazione.
Sembra discutibile. Richiedi agli sviluppatori di mettere sotto le loro librerie di terze parti nella loro cartella <ProjectRoot>/3rdparty/<nameOfDep>
. È altrettanto facile vedere quali librerie di terze parti vengono utilizzate.
Non sto dicendo che non ci sono aspetti positivi. L'ultima squadra in cui facevo parte aveva> 100 deps di terze parti. Sto solo sottolineando che non sono tutte rose. Sto valutando se dovrei sbarazzarmi del pergolato per le mie esigenze, ad esempio.