pnpm vs npm
Struttura flat di npm#
npm utilizza un albero delle dipendenze flat partire dalla versione 3. Ciò porta a un aumento dello spazio su disco, con una node_modules confusionaria come effetto collaterale.
D'altra parte, pnpm gestisce node_modules utilizzando il collegamento fisico e il collegamento simbolico a un archivio globale indirizzabile al contenuto su disco. This lets you get the benefits of far less disk space usage, while also keeping your node_modules clean. C'è la documentazione sul layout dell'archivio se desideri saperne di più.
La cosa buona della struttura corretta di node_modules di pnpm è che "aiuta a evitare bug stupidi" rendendo impossibile l'uso di moduli che non sono specificati nel package.jsondel progetto.
Installazione#
pnpm non consente l'installazione di pacchetti senza salvarli in package.json. Se nessun parametro viene passato a pnpm add, i pacchetti vengono salvati come dipendenze regolari. Come con npm, --save-dev e --save-optional possono essere usati per installare pacchetti come dipendenze di sviluppo o opzionali.
Come conseguenza di questa limitazione, i progetti non avranno alcun pacchetto estraneo quando usano pnpm a meno che non rimuovano una dipendenza e la lascino orfana. Ecco il motivo per cui l'implementazione di pnpm del comando prune non consente di specificare i pacchetti da eliminare - rimuove SEMPRE tutti i pacchetti estranei e orfani.
Dipendenze nella cartella#
Le dipendenze nella cartella iniziano con il prefisso file: e puntano a una cartella nel filesystem. Come npm, pnpm collega simbolicamente queste dipendenze. A differenza di npm, pnpm non esegue l'installazione per le dipendenze dei file.
Ciò significa che se hai un pacchetto chiamato foo (<root>/foo) che ha bar@file:../bar come dipendenza, pnpm non eseguirà l'installazione per <root>/bar quando esegui pnpm install su foo.
Se hai bisogno di eseguire installazioni in più pacchetti contemporaneamente, ad nel caso di un monorepo, dovresti guardare la documentazione per pnpm -r.