Il pezzo mancante
Node.js ha portato JavaScript lato server, ma nel suo primo anno di vita manca un elemento fondamentale: un modo standard per distribuire, installare e gestire il codice riutilizzabile. Ogni sviluppatore organizza le proprie librerie in modo diverso, copia file manualmente o gestisce dipendenze con script ad hoc. Nel 2010 Isaac Schlueter rilascia npm (Node Package Manager), un sistema composto da un registry centralizzato — un archivio online dove pubblicare e scaricare pacchetti — e da un client a riga di comando che automatizza installazione e gestione delle dipendenze.
L’idea non è nuova nel mondo del software: Perl ha CPAN, Python ha PyPI, Ruby ha RubyGems. Ma npm nasce insieme a un ecosistema giovane e in rapida crescita, e la sua architettura ne influenza profondamente la cultura.
package.json e versionamento semantico
Al centro di npm c’è il file package.json, un manifesto in formato JSON che descrive ogni pacchetto: nome, versione, autore, licenza, punto di ingresso del codice e soprattutto la lista delle dipendenze — gli altri pacchetti necessari al funzionamento.
Le versioni seguono il Semantic Versioning (semver): tre numeri separati da punti — major, minor, patch — che comunicano il tipo di cambiamento. Un incremento della versione major segnala modifiche incompatibili; minor indica nuove funzionalità retrocompatibili; patch corregge bug senza alterare l’interfaccia. Il client npm usa queste convenzioni per determinare automaticamente quali versioni delle dipendenze sono compatibili con il progetto.
Moduli piccoli e componibili
npm adotta un modello di dipendenze annidate: ogni pacchetto può avere la propria copia delle sue dipendenze, isolata dalle versioni usate da altri pacchetti nello stesso progetto. Questo approccio evita i conflitti di versione ma può produrre alberi di dipendenze profondi.
La filosofia che emerge è quella dei moduli piccoli e componibili: funzioni singole, ben definite, pubblicate come pacchetti indipendenti e assemblate a necessità. Un approccio che favorisce il riuso ma richiede attenzione nella selezione delle dipendenze.
Con un singolo comando — npm install — il client legge il package.json, interroga il registry, scarica ogni dipendenza con le sue sotto-dipendenze e costruisce l’albero completo nella directory node_modules. Il registro è pubblico e la pubblicazione è aperta a tutti: chiunque può contribuire un pacchetto.
npm è rilasciato sotto licenza Artistic License 2.0.
Link: npmjs.com
