pnpm-Nutzungsanleitung
Als Node.js-Entwickler haben Sie sicherlich schon von
npmundyarn, sie sind leistungsstarke Werkzeuge zur Verwaltung von Projektabhängigkeiten. Aber sind Sie schon einmal aufnode_modulesdie Frustration über riesige Ordner, langsame Installationsgeschwindigkeiten oder schnell voll werdenden Speicherplatz gestoßen? Das ist das Problem, das pnpm lösen kann.
pnpmist ein schneller, speicherplatzsparender Node.js-Paketmanager. Es speichert Pakete mithilfe von Content-Addressing, wobei alle Versionen von Abhängigkeiten zentral an einem Ort auf dem System gespeichert und dann über Hardlinks in Projekte verlinkt werden, wodurch doppelte Installationen vermieden werden.
pnpm's Slogan lautetFast, disk space efficient package manager(Schneller, speicherplatzsparender Paketmanager). Er ist nicht nur extrem schnell, sondern sein einzigartiger Verlinkungsmechanismus spart Ihnen auch eine beträchtliche Menge an Speicherplatz und Bandbreite.
pnpm installieren
Es gibt mehrere Möglichkeiten, pnpm zu installieren; Sie können je nach Ihren Vorlieben und Ihrer Systemumgebung wählen.
Methode 1: Installation über npm (für alle Benutzer empfohlen)
Dies ist die universellste und einfachste Methode. Öffnen Sie Ihr Terminal (Windows-Benutzer können PowerShell oder CMD verwenden) und führen Sie den folgenden Befehl aus:
npm install -g pnpm
Dieser Befehl installiert pnpm über npm in Ihrer globalen Umgebung.
Überprüfen Sie, ob die Installation erfolgreich war: Führen Sie nach der Installation den folgenden Befehl aus, um die Version zu prüfen. Wenn die Versionsnummer normal angezeigt wird, war die Installation erfolgreich.
pnpm --version
Ausgabe ähnlich wie: 8.15.0
Methode 2: Installation über ein eigenständiges Skript
Für macOS- oder Linux-Benutzer können Sie mit dem folgenden Skript installieren:
# macOS/Linux curl -fsSL https://get.pnpm.io/install.sh | sh - # Windows (PowerShell) iwr https://get.pnpm.io/install.ps1 -useb | iex
pnpm verwenden
Nachdem Sie nun gelernt haben, wie man es installiert, beginnen wir mit der tatsächlichen Verwendung von pnpm. Sein Befehlsdesign ist sehr intuitiv; wenn Sie mit npm vertraut sind, können Sie fast nahtlos wechseln.
Ein neues Projekt initialisieren
Ähnlich wienpm init, pnpm kann verwendet werden, um ein Projekt zu initialisieren und zu erstellenpackage.jsonDatei.
# 交互式地回答问题,创建 package.json pnpm init # 快速创建一个带有默认值的 package.json pnpm init -y
Führen Siepnpm init -yDanach bekommst du ein sehr einfachespackage.jsonDatei:
Beispiel
"name": "your-project-name",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Fehler: kein Test angegeben\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Abhängigkeiten installieren
Der Installationsbefehl von pnpm istpnpm add <package-name>, äquivalent zunpm install <package-name>。
# 安装所有依赖 pnpm install # 添加依赖包 pnpm add <package-name> # 添加开发依赖 pnpm add -D <package-name> # 添加全局包 pnpm add -g <package-name> # 安装指定版本 pnpm add <package-name>@<version>
Abhängigkeiten aktualisieren
# 更新所有依赖 pnpm update # 更新指定包 pnpm update <package-name> # 更新到最新版本(忽略 package.json 中的版本范围) pnpm update --latest
Abhängigkeiten entfernen
pnpm remove <package-name>
Skripte ausführen
# 运行 package.json 中定义的脚本 pnpm run <script-name> # 一些常见的简写 pnpm start pnpm test pnpm build
Befehlsvergleichstabelle npm zu pnpm
| npm-Befehl | pnpm-Befehl |
|---|---|
npm install |
pnpm install |
npm install <pkg> |
pnpm add <pkg> |
npm install <pkg> --save-dev |
pnpm add -D <pkg> |
npm install <pkg> --global |
pnpm add -g <pkg> |
npm update |
pnpm update |
npm uninstall <pkg> |
pnpm remove <pkg> |
npm run <script> |
pnpm run <script> |
npx <command> |
pnpm dlx <command> |
npm list |
pnpm list |
npm outdated |
pnpm outdated |
npm audit |
pnpm audit |
Konfigurationsdatei
pnpm unterstützt die Konfiguration über die ⟦⟧.npmrc-.npmrcDatei
Wenn Sie dies im Projektstammverzeichnis erstellen, können Sie das Verhalten von pnpm anpassen.
Gängige Konfigurationsbeispiele
# 设置国内镜像源(淘宝) registry=https://registry.npmmirror.com # 自动安装 peer dependencies auto-install-peers=true # 严格模式 strict-peer-dependencies=true # shamefully-hoist(提升依赖,兼容某些工具) shamefully-hoist=true # 指定 node_modules 目录结构 node-linker=hoisted # 设置存储目录 store-dir=~/.pnpm-store
Aktuelle Konfiguration anzeigen
pnpm config list
Konfigurationsoptionen festlegen:
pnpm config set <key> <value>
Arbeitsbereich
pnpm bietet eine integrierte, leistungsstarke Monorepo-Unterstützung.
Definieren Sie einen Workspace, indem Sie eine pnpm-workspace.yaml-Datei im Projektstammverzeichnis erstellen.
Konfigurationsbeispiel:
packages: - 'packages/*' - 'apps/*' <p> - '!**/test/**'Beispiel für Projektstruktur:
my-monorepo/
├── pnpm-workspace.yaml
├── package.json
├── packages/
│ ├── package-a/
│ │ └── package.json
│ └── package-b/
│ └── package.json
└── apps/
└── web-app/
└── package.json
Workspace-Befehle
# 在所有工作区包中安装依赖 pnpm install # 在指定工作区执行命令 pnpm --filter <package-name> <command> # 在所有工作区执行命令 pnpm -r <command> # 递归运行脚本 pnpm -r run build # 为工作区添加依赖 pnpm --filter <package-name> add <dependency> # 添加工作区内部依赖 pnpm --filter package-a add package-b@workspace:*
Workspace-Protokoll
Wenn Sie auf andere Pakete innerhalb des Workspace verweisen, verwenden Sie das workspace:-Protokoll:
json{
"dependencies": {
"package-a": "workspace:*",
"package-b": "workspace:^1.0.0"
}
}Erweiterte Funktionen
pnpm exec und pnpm dlx
# 执行本地安装的包 pnpm exec <command> # 执行远程包(类似 npx) pnpm dlx create-react-app my-app # 使用特定版本 pnpm dlx create-react-app@latest my-app
Abhängigkeitsbaum anzeigen
# 查看依赖树 pnpm list # 指定深度 pnpm list --depth 2 # 只显示生产依赖 pnpm list --prod # 查看全局包 pnpm list -g
Veraltete Abhängigkeiten anzeigen
pnpm outdated
Sicherheit der Abhängigkeiten prüfen
pnpm audit # 自动修复安全问题 pnpm audit --fix
Cache bereinigen
# 清理未使用的包 pnpm store prune # 查看存储位置 pnpm store path # 查看存储状态 pnpm store status
Lockfile importieren
Bei der Migration von anderen Paketmanagern:
# 从 package-lock.json 导入 pnpm import # 从 yarn.lock 导入 pnpm import
Pakete patchen
Wenn Sie ein Abhängigkeitspaket vorübergehend ändern müssen:
# 创建补丁 pnpm patch <package-name>@<version> # 应用补丁后提交 pnpm patch-commit <path>
Was ist pnpm? Was sind seine Kernvorteile?
Bevor wir tiefer in die Nutzung einsteigen, müssen wir zunächst die Kernphilosophie von pnpm und die Veränderungen, die sie mit sich bringt, verstehen.
pnpm (Performant npm)ist ein Node.js-Paketmanager, der abwärtskompatibel mit npm ist, was bedeutet, dass die überwiegende Mehrheit vonnpmBefehlen inpnpmdirekt verwendet werden kann.
Das Designziel von pnpm ist es, die Engpässe traditioneller Paketmanager (wie npm und yarn) bei Speicherplatz und Installationsgeschwindigkeit zu lösen.
Probleme mit traditionellen Paketmanagern
Stellen Sie sich vor, Sie arbeiten in Ihrem Unternehmen an 10 verschiedenen Frontend-Projekten, und jedes Projekt hängt von[email protected]. Bei Verwendung von npm oder yarn wird dieseslodashPaket vollständig heruntergeladen und 10-mal gespeichert, in 10 verschiedenennode_modulesOrdnern auf Ihrem Computer. Dies verursacht eine enorme Verschwendung von Speicherplatz.
Der revolutionäre Ansatz von pnpm: inhaltsadressierbare Speicherung und Hardlinks
pnpm verwendet einen cleveren Ansatz:
- Globaler Speicher: Wenn Sie ein Paket installieren, speichert pnpm dessen Inhalte ineinem globalen Single-Version-Repository(normalerweise unter
~/.pnpm-store)。 - Hardlinks: In Ihrem Projekt
node_modulesin, pnpm kopiert nicht die vollständigen Dateien des Pakets, sondern erstelltHardlinks. Man kann sich einen Hardlink als eine "fortgeschrittene Verknüpfung" vorstellen; er teilt dieselben Festplattendaten wie die Originaldatei. - Symlink-Organisation: Zum Beibehalten
node_modulesflache Struktur (umrequireAnweisungen zu erleichtern), pnpm erstellt einen ausgeklügelten Satz vonsymbolischen Links(Softlinks), um den Abhängigkeitsbaum zu organisieren.
Durch diesen Mechanismus,egal wie viele Projekte von demselben Paket abhängen, wird nur eine Kopie des Pakets auf der physischen Festplatte gespeichert.. Dies bringt unmittelbare Vorteile:
- Spart eine große Menge an Speicherplatz: Für Entwickler mit mehreren Projekten sind die Einsparungen äußerst erheblich.
- Extrem schnelle Installationsgeschwindigkeit: Bei nachfolgenden Installationen, wenn das Paket bereits im globalen Store vorhanden ist, muss pnpm nur Links erstellen, was um Größenordnungen schneller ist als Herunterladen und Entpacken.
- Verbesserte Sicherheit:
node_modulesDie Paketdateien darin sind schreibgeschützt (da es sich um Hardlinks handelt), was das Risiko vermeidet, dass Projektskripte versehentlich die Inhalte von Abhängigkeitspaketen ändern, und den Determinismus der Abhängigkeiten gewährleistet.

Die obige Abbildung zeigt deutlich den Kern-Workflow von pnpm: Alle Projekte teilen dieselbe Paketdatei im globalen Store über Hardlinks und dann in ihren jeweiligennode_modulesVerzeichnissen wird die Abhängigkeitsstruktur durch symbolische Links aufgebaut.
| Funktionsvergleich | npm (v7+) / yarn | pnpm |
|---|---|---|
| Speicherplatzverbrauch | Abhängigkeiten werden für jedes Projekt separat gespeichert und beanspruchen viel Speicherplatz. | Alle Projekte nutzen gemeinsam eineeinzige Kopie, mit extrem geringem Speicherplatzverbrauch. |
| Installationsgeschwindigkeit | Langsamer; erfordert das Herunterladen, Entpacken und Aufbauen des Abhängigkeitsbaums. | Extrem schnell, besonders für nachfolgende Installationen, bei denen hauptsächlich Links erstellt werden. |
node_modulesStruktur |
Flach oder halbflach, was zu Dependency-Hoisting und Problemen mit Phantom-Abhängigkeiten führen kann. | Striktenicht-flache Struktur, die Abhängigkeitsbeziehungen genau simuliert und Phantom-Abhängigkeiten eliminiert. |
| Monorepo-Unterstützung | Unterstützt über Workspaces, aber mit Leistungsengpässen. | Native, effizienteWorkspaces-Unterstützung; Leistung ist ihre Stärke. |
| Paketverwaltungsmodell | Kopiert Dateien während der Installation in das Projekt. | Link-Modell (Hardlinks + symbolische Links). |
| Sicherheit | Abhängigkeiten können durch Projektskripte geändert werden. | Abhängigkeitsdateien sind schreibgeschützte Hardlinks und bieten höhere Sicherheit. |
Offizielle Ressourcen:
Andere Erweiterungen