Articolo originale: npm vs npx — What’s the Difference?

Se hai mai usato Node.js, hai usato di sicuro npm.

npm (node package manager - gestore di pacchetti di node) è il gestore di dipendenze/pacchetti che è in dotazione con l'installazione di Node.js. Fornisce agli sviluppatori un modo di installare pacchetti sia globalmente che localmente.

Qualche volta potresti voler esaminare uno specifico pacchetto e provare dei comandi. Ma non puoi farlo senza installare la dipendenza nella cartella locale node_modules.

È qui che entra in gioco npx.

In questo articolo daremo un'occhiata alla differenza tra npm e npx e impareremo come ottenere il meglio da entrambi.

Per prima cosa, capiamo cosa è effettivamente npm e per cosa possiamo utilizzarlo.

Il gestore di pacchetti npm

npm è, innanzitutto, un repository online per la pubblicazione di progetti Node.js open source.

In secondo luogo, è uno strumento per riga di comando che ti aiuta a installare dei pacchetti e gestire le loro versioni e dipendenze. Ci sono centinaia di migliaia di librerie e applicazioni Node.js su npm e molte altre sono aggiunte ogni giorno.

npm non esegue nessun pacchetto per conto suo. Se vuoi eseguire un pacchetto usando npm, devi specificarlo nel tuo file package.json.

Quando gli eseguibili sono installati con i pacchetti npm, npm crea dei link ad essi:

  • le installazioni locali hanno i link creati nella cartella ./node_modules/.bin/.
  • le installazioni globali hanno i link creati dalla cartella globale bin/ (per esempio /usr/local/bin su Linux o %AppData%/npm su Windows)

Per eseguire un pacchetto usando npm devi scrivere il percorso locale, così:

$ ./node_modules/.bin/tuo-pacchetto

oppure puoi eseguire un pacchetto installato localmente aggiungendolo nel tuo file package.json nella sezione scripts, in questo modo:

{
  "name": "la-tua-applicazione",
  "version": "1.0.0",
  "scripts": {
    "il-tuo-pacchetto": "il-tuo-pacchetto"
  }
}

Puoi quindi eseguire lo script usando npm run:

npm run il-tuo-pacchetto

Puoi vedere che eseguire un pacchetto con npm richiede un po' di cerimonie.

Fortunatamente, è proprio qui che npx si mostra utile.

L'esecutore di pacchetti npx

Fin dalla versione 5.2.0 di npm, npx è installato assieme a npm. Quindi è praticamente uno standard al giorno d'oggi.

npm è anche uno strumento per la riga di comando il cui proposito è rendere più semplice installare e gestire le dipendenze ospitate nel registro npm.

Adesso, è molto semplice eseguire ogni sorta di eseguibile basato su Node.js che dovresti installare normalmente con npm.

Puoi eseguire il seguente comando per sapere se npx è già installato nella tua versione attuale di npm.

$ which npx

Se non lo è puoi installarlo con questo comando:

$ npm install -g npx

Adesso che ti sei assicurato che è installato, vediamo alcuni dei casi che rendono npx estremamente utile.

Eseguire con facilità un pacchetto installato localmente

Se desideri eseguire un pacchetto installato localmente, tutto quello che devi fare è scrivere:

$ npx il-tuo-pacchetto

npx controlla se il <comando> / <pacchetto> è presente in $PATH, o nei binari del progetto locale, e se lo è lo esegue.

Eseguire pacchetti non installati precedentemente

Un altro grande vantaggio è l'abilità di eseguire un pacchetto che non è stato installato precedentemente.

Testiamolo eseguendo:

$ npx cowsay wow	
npx-cowsay-wow-npm-vs-npx

È fantastico perché a volte vuoi usare degli strumenti della riga di comando, ma non vuoi installarli globalmente solo per testarli.

Questo significa che puoi risparmiare un po' di spazio sul disco e semplicemente eseguirli quando ti serve. Inoltre, le tue variabili globali saranno meno inquinate.

Eseguire il codice direttamente da GitHub

execute-gist-script-with-npx

Puoi usare npx per eseguire qualsiasi gist o repo da GitHub. Concentriamoci sull'esecuzione di un gist su GitHub perché è più facile crearne uno.

Lo script più semplice consiste in un file JS principale e un package.json. Dopo che hai sistemato i file, tutto quello che devi fare è eseguire npx con il link al gist come mostrato nell'immagine qui sopra.

Qui puoi trovare il codice che ho usato per questo esempio.

Assicurati di leggere accuratamente qualsiasi script prima di eseguirlo per evitare problemi seri che possono insorgere per del codice dannoso.

Testare diverse versioni dei pacchetti

npx rende molto semplice testare diverse versioni di pacchetti o moduli Node.js. Per testare questa fantasmagorica funzionalità, installeremo localmente il pacchetto create-react-app e testeremo una versione next.

Questo comando elencherà delle tag dist verso la fine dell'output. Le tag dist forniscono alias per i numeri di versione rendendo il tutto più facile da digitare.

$ npm v create-react-app
create-react-app-dist-tags

Usiamo npm per provare la tag dist next di create-react-app che creerà la app dentro una cartella chiamata sandbox.

$ npx create-react-app@next sandbox

npx installa temporaneamente la versione next di create-react-app e poi la esegue per creare lo scheletro dell'app e installare le sue dipendenze.

Una volta installata, possiamo navigare all'app con:

$ cd sandbox

ed attivarla con questo comando:

$ npm start
create-react-app-npx-next-version

Aprirà automaticamente l'app React in una finestra nel tuo browser di default.

Ora abbiamo una app eseguita sulla versione next del pacchetto create-react-app!

index-page-react-app
Ecco come appare la pagina index della tua app React.

In conclusione

npx aiuta ad evitare versioni multiple, problemi di dipendenze e aiuta a installare pacchetti non necessari che vogliamo solo provare.

Fornisce anche un modo chiaro e semplice di eseguire pacchetti, comandi, moduli e perfino repo e gist da GitHub.

Se non hai mai usato npx prima d'ora, questo è un buon momento per iniziare!