Via G. Falcone 5, Pollenza (MC), Italy
+39 0733 203595

NPM: benefici di installare packages localmente

Ancora ricordo il mio primo approccio a npm ed al suo modo di gestire packages: ogni volta che bisognava installare qualche cosa relativo al workflow di un progetto era un semplice npm install -g nome-package e come per magia il comando relativo era disponibile nel terminale.

Questo è un approccio sicuramente comodo e spesso si vede anche nelle guide di installazione di alcuni packages.
Andando avanti però è possibile che il numero dei progetti cresca e non è raro ritrovarsi nello scenario in cui due progetti abbiano la stessa dipendenza con requisiti di versione differente. Così ci si rende presto conto che installare packages globalmente non è sempre la scelta migliore.

Installare packages localmente

Come molti di voi sapranno, oltre che a livello globale, npm permette di installare packages anche a livello locale, ossia di progetto, tramite npm install --save o npm install --save-dev. I due argomenti differiscono per il fatto che con il primo installiamo dipendenze che poi andremo ad inserire nel bundle dell’applicazione finale, mentre il secondo per le dipendenze che ci servono in fase di sviluppo.

Facciamo un esempio pratico: supponiamo di voler avere un progetto che si avvale di http-server.

Per cominciare creiamo una cartella che farà da root del progetto ed installiamo http-server come dipendenza locale:

$ mkdir try-local
$ cd try-local
$ npm init -y
$ npm install –save-dev http-server

Il comando npm init -y serve semplicemente a creare un package.json con dei valori di default.
Al momento digitando http-server da terminale otterremo un messaggio di errore: comando non trovato. Possiamo notare però che dentro la cartella node_modules è stata creata una cartella .bin contenente tutti gli eseguibili delle dipendenze che abbiamo installato (quindi nel nostro caso http-server ed altri eseguibili relativi alle dipendenze di cui si serve).
Ed ecco qui che con:

$ ./node_modules/.bin/http-server
Starting up http-server, serving ./
Available on:
http://127.0.0.1:8080

abbiamo il nostro http-server funzionante senza bisogno di essere installato globalmente.

Bisogna ammettere che questo comando è un po’ scomodo. Fortunatamente npm ci mette a disposizione un potente strumento: gli npm scripts (se non ne avete mai sentito parlare vi consiglio questo articolo introduttivo).
La cosa interessante degli npm scripts è che prima vanno a cercare gli eseguibili nella cartella node_modules del progetto e solo in caso di fallimento vanno a cercare nei packages globali.

A questo punto basterà inserire nel package.json:


“scripts”: {
aa“server”: “http-server”
},

per poter avviare http-server da terminale semplicemente digitando npm run server.

Benefici

Installare packages localmente permette di avere progetti ben organizzati, ognuno con le sue dipendenze ed ognuno con le proprie versioni (quindi evitando il vincolo di una dipendenza globale a cui tutti fanno riferimento). Le dipendenze sono tutte esplicitate nel package.json quindi con un semplice npm install chiunque sarà in grado di inizializzare ed utilizzare il progetto.

Eccezioni

Ovviamente non tutte le dipendenze si possono installare localmente, come ad esempio i noti generatori yeoman che permettono di creare uno scheletro di progetto già configurato. In questo caso l’installazione globale è obbligatoria perché il comando che andremo ad usare servirà proprio per generare il progetto su cui andremo a lavorare.

Un altro caso potrebbe essere quello di avere una dipendenza molto pesante usata da molti progetti e quindi si potrebbe decidere di installarla globalmente (stando ovviemente attenti ai conflitti di versione tra progetti).

Conclusione

Abbiamo visto i benefici di installare npm packages a livello locale ossia dipendenze più esplicite e nessun vincolo sulle versioni. Installare packages a livello globale rimane comunque perfettamente lecito, ma spero che questo articolo vi aiuti a riflettere e prendere la decisione più consona al vostro workflow e preferenze di progetto.

 

Alla prossima!

Related Posts

Leave a reply