JavaScript-Paketmanager pnpm 4 überarbeitet die Verzeichnisstruktur

Der als Alternative zu npm und Yarn vorgesehene Paketmanager pnpm setzt zudem künftig Node.js 10 voraus.

In Pocket speichern vorlesen Druckansicht 4 Kommentare lesen
JavaScript-Paketmanager pnpm 4 überarbeitet die Verzeichnisstruktur

(Bild: Nice to meet you / Shutterstock.com)

Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag

Der Paketmanager pnpm ist in Version 4.0 erschienen. Er lässt sich als Alternative zu npm und Yarn verwenden und ist vor allem für Monorepos optimiert. Im Gegensatz zu den anderen Paketmanagern setzt er nicht auf eine flache Struktur, sondern gruppiert die Pakete mit ihren Dependencies. Version 4 bringt unter anderem Änderungen bei der Verzeichnisstruktur und für das Hochziehen (Hoisting) von Abhängigkeiten.

Als Basis setzt pnpm 4.0 Node.js 10 voraus. Zuvor hatten die Entwickler die Community befragt, die sich zwar mit geringer Teilnehmerzahl, aber deutlich für das Abschalten des Supports für Node.js 8 ausgesprochen hat. Trotz der Umstellung sollte pnpm weiter mit Node.js 8 funktionieren, aber die Entwickler testen den Paketmanager nicht mehr dazu.

pnpm 4.0 bringt eine neue Struktur für node_modules mit. Die hart verlinkten Dependencies finden sich nun in node_modules/.pnpm/ und die hochgezogenen Pakete befinden sich im Unterverzeichnis node_modules/.pnpm/node_modules. Auf die Weise haben Anwendungen keinen Zugriff auf letztere Pakete, Abhängigkeiten dagegen schon.

Für das Hochziehen gilt nun auch die neue Konfigurationseinstellung hoist, die standardmäßig true ist. Welche Pakete hochgezogen werden, lässt sich über hoist-pattern festlegen, das standardmäßig mit der Wildcard * alle Pakete betrifft. Schließlich entspricht der Parameter shamefully-hoist dem shamefully-flatten in früheren pnpm-Releases: Das Projekt bekommt Zugriff auf die hochgezogenen Abhängigkeiten.

Außerdem haben die Entwickler die Ausgabe für einige Befehle überarbeitet. Neben der übersichtlicheren, über den Parameter --help angezeigte Hilfe, soll die Ansicht der veralteten Pakete über pnpm outdated einen besseren Überblick bieten. Neu ist die dafür die Ausgabe in verkürzter Listen- statt Tabellenform über den Parameter --no-table.

Die Tabelle mit den veralteten Pakete ist nun übersichtlicher.

(Bild: pnpm (GitHub-Repsoitory))

Der Platzhirsch unter den JavaScript-Paketmanagern npm hat zum Monatsanfang sein zehnjähriges Jubiläum gefeiert, und Facebook hat vor zwei Jahren mit Yarn 1.0 eine Konkurrenz ins Feld geschickt. pnpm dürfte dagegen weniger bekannt sein, wie auch die Umfrage zur weiteren Unterstützung von Node.js 8 zeigt, an der gerade einmal 70 Entwickler teilgenommen haben.

pnpm geht mit einem eigenen Konzept an den Start und bricht dabei mit den Vorgaben der anderen beiden Paketmanager, eine möglichst flache Struktur zu schaffen. Ein Beitrag mit dem Titel "Flat node_modules is not the only way" erklärt die Architektur und den Gedanken dahinter.

Der Paketmanager nutzt eine Kombination aus harten und symbolischen Links, um sicherzustellen, dass alle Pakete nur einmal lokal gespeichert werden. Andere Paketmanager setzen für das Vermeiden von Redundanzen innerhalb von Projekten auf das Hochziehen von Paketen in eine flache Struktur, was aber gerade bei Multi-Package-Repositorys zu Problemen führen kann. pnpm verwaltet für alle Projekte ein zentrales node_modules-Verzeichnis.

Beispiel des Hochziehens von Paketen zur Hoisted File Structure von Yarn.

(Bild: Facebook Yarn)

Eine weitere Besonderheiten von pnpm ist, dass Pakete nur auf Dependendies zugreifen können, die in package.json definiert sind. Schließlich gibt es ein Lockfile, das übrigens im aktuellen Release ebenfalls den Speicherort gewechselt hat und sich nun in node_modules/.pnpm/lock.yaml befindet.

Weitere Details zu den Neuerungen in pnpm 4 lassen sich den Release Notes auf GitHub entnehmen. Kurz nach der Veröffentlichung hat das Team Version 4.0.1 mit ein paar Bugfixes nachgereicht. (rme)