Skip to content

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:

bash
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:

bash
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 sezione devDependencies del file package.json.
  • --no-save che impedisce di salvare il pacchetto nel file package.json.
  • --no-optional che impedisce l'installazione di dipendenze opzionali.
  • --save-optional che aggiunge il pacchetto alla sezione optionalDependencies del file package.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

bash
npm update

Questo aggiornerà tutte le dipendenze alla loro ultima versione.

È possibile specificare anche un singolo pacchetto da aggiornare:

bash
npm update <nome-pacchetto>

Rimozione dei pacchetti

Per rimuovere un pacchetto, è possibile eseguire:

bash
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

bash
npm install <nome-pacchetto>@<versione>

È inoltre possibile installare l'ultima versione di un pacchetto eseguendo

bash
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

bash
npm run <nome-attività>

Ad esempio, se si dispone di un file package.json con il seguente contenuto:

json
{
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  }
}

È molto comune utilizzare questa funzionalità per eseguire Webpack:

json
{
  "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

bash
npm run watch
npm run dev
npm run prod