Introduzione al gestore di pacchetti npm
Introduzione a npm
npm
è il gestore di pacchetti standard per Node.js.
A settembre 2022 sono stati segnalati oltre 2,1 milioni di pacchetti elencati nel registro npm, rendendolo il più grande repository di codice di un singolo linguaggio al mondo, e puoi essere certo che esiste un pacchetto per (quasi!) tutto.
È iniziato come un modo per scaricare e gestire le dipendenze dei pacchetti Node.js, ma da allora è diventato uno strumento utilizzato anche in JavaScript frontend.
TIP
Yarn
e pnpm
sono alternative alla riga di comando npm. Puoi anche provarli.
Pacchetti
Installazione di tutte le dipendenze
È possibile installare tutte le dipendenze elencate nel file package.json
eseguendo:
npm install
installerà tutto ciò di cui il progetto ha bisogno, nella cartella node_modules
, creandola se non esiste già.
Installazione di un singolo pacchetto
È possibile installare un singolo pacchetto eseguendo:
npm install <package-name>
Inoltre, da npm 5, questo comando aggiunge <package-name>
alle dipendenze del file package.json
. Prima della versione 5, era necessario aggiungere il flag --save
.
Spesso vedrai altri flag aggiunti a questo comando:
--save-dev
(o-D
) che aggiunge il pacchetto alla sezionedevDependencies
del filepackage.json
.--no-save
che impedisce di salvare il pacchetto nel filepackage.json
.--no-optional
che impedisce l'installazione di dipendenze opzionali.--save-optional
che aggiunge il pacchetto alla sezioneoptionalDependencies
del filepackage.json
.
Possono essere utilizzati anche i nomi abbreviati dei flag:
-S
:--save
-D
:--save-dev
-O
:--save-optional
La differenza tra devDependencies
e dependencies
è che le prime contengono strumenti di sviluppo, come una libreria di test, mentre le seconde sono incluse nell'applicazione in produzione.
Per quanto riguarda le optionalDependencies
, la differenza è che un errore di compilazione della dipendenza non causerà un errore di installazione. Ma è responsabilità del tuo programma gestire la mancanza della dipendenza. Per saperne di più sulle dipendenze opzionali.
Aggiornamento dei pacchetti
L'aggiornamento è semplificato eseguendo
npm update
Questo aggiornerà tutte le dipendenze alla loro ultima versione.
È possibile specificare anche un singolo pacchetto da aggiornare:
npm update <nome-pacchetto>
Rimozione dei pacchetti
Per rimuovere un pacchetto, è possibile eseguire:
npm uninstall <nome-pacchetto>
Versionamento
Oltre ai semplici download, npm
gestisce anche il versionamento, quindi è possibile specificare qualsiasi versione specifica di un pacchetto, o richiedere una versione superiore o inferiore a quella necessaria.
Spesso si scopre che una libreria è compatibile solo con una major release di un'altra libreria.
Oppure un bug nell'ultima versione 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 utilizzi la stessa versione fino a quando il file package.json
non viene aggiornato.
In tutti questi casi, il versionamento aiuta molto, e npm
segue lo standard semantic versioning (semver).
È possibile installare una versione specifica di un pacchetto eseguendo
npm install <nome-pacchetto>@<versione>
È inoltre possibile installare l'ultima versione di un pacchetto eseguendo
npm install <nome-pacchetto>@latest
Esecuzione di attività
Il file package.json supporta un formato per specificare attività della riga di comando che possono essere eseguite utilizzando
npm run <nome-attività>
Ad esempio, se si dispone di un file package.json con il seguente contenuto:
{
"scripts": {
"start": "node index.js",
"test": "jest"
}
}
È 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, invece di digitare quei lunghi comandi, facili da dimenticare o da digitare erroneamente, è possibile eseguire
npm run watch
npm run dev
npm run prod