JavaScript >> Javascript-Tutorial >  >> Tags >> npm

So migrieren Sie von Garn / npm zu pnpm

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