Motivation
pnpm
ist leistungsfähiger beim Abrufen, Auflösen und Speichern von Abhängigkeiten. Meine persönliche Erfahrung zeigt, dass in einigen Projekten pnpm
kann ca. 10-mal schneller beim Auflösen von Abhängigkeiten und bis zu 3-mal effizienter bei der Festplattennutzung.
Es ist auch einfach, mit pnpm
zu beginnen wenn Sie npm
verwendet haben oder yarn
vor, weil die CLI sehr ähnlich ist.
https://pnpm.io/motivation
Migrationsleitfaden
Schritt 1 :Installieren Sie pnpm
Installation
Schritt 2 :Löschen Sie node_modules
npx npkill
Schritt 3 :Zu package.json
hinzufügen
"scripts": {
"preinstall": "npx only-allow pnpm",
...
}
Dadurch wird verhindert, dass andere Entwickler versehentlich Abhängigkeiten mit etwas anderem als pnpm
installieren
Schritt 4 :Erstellen Sie pnpm-workspace.yaml
packages:
# include packages in subfolders (e.g. apps/ and packages/)
- "apps/**"
- 'packages/**'
# if required, exclude some directories
- '!**/test/**'
Schritt 4 (a) :"workspaces"
entfernen ab "package.json"
, da es nicht mehr benötigt wird.
Schritt 5 :Laufen
pnpm import
Dieser Befehl erstellt einen pnpm-lock.yaml
Datei basierend auf yarn.lock
(oder packages-lock.json
)
Schritt 6 :Entfernen Sie yarn.lock
(oder packages-lock.json
)
Schritt 7 :Abhängigkeiten installieren
pnpm i
Schritt 8 :Ersetzen Sie npm run
(oder yarn
) bis pnpm
insgesamt package.json
und andere Dateien (z.B. pnpm test
statt npm run test
)
Wichtig! Beachten Sie dabei pnpm
verwendet kein Abhängigkeits-Heben:
In der Praxis bedeutet dies, wenn Sie ein Paket A
haben das ein Paket B
importiert (import something from 'B'
), gibt aber B
nicht explizit an im dependencies
oder devDependencies
, dann schlägt die Ausführung fehl.
Spickzettel
Tabellen | Befehle | Cool |
---|---|---|
Installieren Sie Abhängigkeiten | pnpm i | https://pnpm.io/cli/install |
Fügen Sie eine Abhängigkeit hinzu | pnpm add <package> | https://pnpm.io/cli/add |
Zeigt alle Pakete, die von dem angegebenen Paket abhängen | pnpm why <package> | https://pnpm.io/cli/why |
Führen Sie einen Befehl so aus, als ob er aus dem Stammverzeichnis des Projekts und nicht aus einem Arbeitsbereichspaket ausgeführt würde | pnpm -w <command> | https://pnpm.io/pnpm-cli#-w---workspace-root |
Befehle auf bestimmte Teilmengen von Paketen beschränken | pnpm --filter <package_selector> <command> | https://pnpm.io/filtering |
Dies führt einen beliebigen Befehl aus dem "scripts"-Objekt jedes Pakets aus | pnpm -r <command> | https://pnpm.io/cli/run#--recursive--r |