npm & bower: differenze

NPM è più comunemente usato per la gestione di moduli Node.js, ( ) ma funziona anche per il front-end. Bower invece è stato creato esclusivamente per il front-end ed è ottimizzato per questo compito, e si intsalla proprio come pacchetto npm

npm install -g bower

La differenza più grande è l'albero delle dipendenze di NPM è "nidificato" mentre Bower richiede un albero delle dipendenze piatta (cioè la risoluzione delle dipendenze deve essere risolta in un apposito file json dallo sviluppatore).

[...] 
    "dependencies": {
    "angular": "1.4.8",
    "angular-animate": "1.4.8",
    "angular-cookies": "1.4.8",
    "angular-loading-bar": "0.7.1",
    "angular-material": "0.10.0",
[...]

Un albero delle dipendenze "nidificato" significa che le dipendenze possono avere le proprie dipendenze, che possono averne di altre e così via.

Questo può andare bene sul server, in cui non c'è bisogno di preoccuparsi molto per lo spazio ma ovviamente non funziona bene sul front-end (molti plugin utilizzano una dipendenza da una libreria jQuery diversa, lui le scaricherebbe tutte! )

La ragione per cui molti progetti usano entrambi è che usano Bower per i pacchetti di front-end e NPM per strumenti di sviluppo come Yeoman, Grunt,CoffeeScript, etc.