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. Questo porta i benefici di utilizzare molto meno spazio su disco, pur mantenendo node_modules
pulita. 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.json
del 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
.