📢 Nuovo Corso Laravel API disponibile!

NPM il Gestore di Pacchetti

Introduzione a npm

npm è il gestore di pacchetti standard per Node.js.

Nel settembre 2022 sono stati segnalati oltre 2,1 milioni di pacchetti elencati nel registro npm, rendendolo il repository di codice singolo più grande al mondo per un linguaggio e puoi essere certo che esiste un pacchetto per (quasi!) tutto.

Inizialmente è nato come un modo per scaricare e gestire le dipendenze dei pacchetti Node.js, ma è diventato uno strumento utilizzato anche nello sviluppo di JavaScript lato frontend.

Yarn e pnpm sono alternative alla CLI di npm. Puoi dare un’occhiata anche a loro.

Pacchetti

npm gestisce il download delle dipendenze del tuo progetto.

Installazione di tutte le dipendenze

Se un progetto ha un file package.json, eseguendo

Terminal window
npm install

installerà tutto ciò di cui ha bisogno il progetto, nella cartella node_modules, creandola se non esiste già.

Installazione di un singolo pacchetto

Puoi anche installare un pacchetto specifico eseguendo

Terminal window
npm install <nome-pacchetto>

Inoltre, da npm 5, questo comando aggiunge <nome-pacchetto> al file package.json nelle dipendenze. Prima della versione 5, era necessario aggiungere il flag --save.

Spesso vedrai aggiunti a questo comando ulteriori flag:

  • --save-dev installa e aggiunge l’entry al file package.json nelle devDependencies
  • --no-save installa ma non aggiunge l’entry al file package.json nelle dependencies
  • --save-optional installa e aggiunge l’entry al file package.json nelle optionalDependencies
  • --no-optional impedisce l’installazione delle dipendenze opzionali

Possono essere utilizzati anche gli shorthands dei flag:

  • -S: --save
  • -D: --save-dev
  • -O: --save-optional

La differenza tra devDependencies e dependencies è che la prima contiene strumenti di sviluppo, come una libreria di testing, mentre la seconda è inclusa nell’applicazione in produzione.

Per quanto riguarda le optionalDependencies, la differenza è che il fallimento nella compilazione della dipendenza non causerà il fallimento dell’installazione. Ma è responsabilità del tuo programma gestire la mancanza della dipendenza. Leggi di più sulle dipendenze opzionali.

Aggiornamento dei pacchetti

L’aggiornamento è reso facile anche da

Terminal window
npm update

npm controllerà tutti i pacchetti per una versione più recente che soddisfa i tuoi vincoli di versione.

Puoi specificare anche un singolo pacchetto da aggiornare:

Terminal window
npm update <nome-pacchetto>

Versioning

Oltre ai download standard, npm gestisce anche il versioning, quindi puoi specificare una versione specifica di un pacchetto o richiedere una versione più alta o più bassa di quella di cui hai bisogno.

Molte volte scoprirai che una libreria è compatibile solo con una release principale di un’altra libreria. O un bug nell’ultima release di una libreria, ancora non risolto, sta causando un problema.

Specificare una versione esplicita di una libreria aiuta anche a mantenere tutti sulla stessa versione esatta di un pacchetto, in modo che l’intero team esegua la stessa versione fino a quando il file package.json non viene aggiornato.

In tutti questi casi, il versioning aiuta molto, e npm segue lo standard di versioning semantico (semver).

Puoi installare una versione specifica di un pacchetto, eseguendo

Terminal window
npm install <nome-pacchetto>@<versione>

Esecuzione di Task

Il file package.json supporta un formato per specificare le attività da eseguire tramite la riga di comando usando

Terminal window
npm run <nome-attività>

Ad esempio:

{
"scripts": {
"start-dev": "node lib/server-development",
"start": "node lib/server-production"
}
}

È molto comune utilizzare questa funzionalità per eseguire Webpack:

{
"scripts": {
"watch": "webpack --watch --progress --colors --config webpack.conf.js",
"dev": "webpack --progress --colors --config webpack.conf.js",
"prod": "NODE_ENV=production webpack -p --config webpack.conf.js"
}
}

Quindi, anziché digitare questi comandi lunghi, che sono facili da dimenticare o digitare erroneamente, puoi eseguire

Terminal window
$ npm run watch
$ npm run dev
$ npm run prod