Mit Workspaces und automatisierten Peer-Dependency-Installationen: npm 7.0.0 ist da

(Grafik: GitHub)
npm, den Paketmanager für die JavaScript-Runtime Node.js gibt es mittlerweile seit elf Jahren. Mit Version 7.0.0 hat das zugehörige CLI jetzt ein Update erhalten. Die neue Version wurde erstmals im Mai diesen Jahres vorgestellt und soll nächste Woche mit Node.js 15.0.0 ausgeliefert werden. Wer solange nicht warten will, kann die neue Version bereits jetzt über npm i -g npm@7
installieren.
Das ist neu
Workspaces und automatische Peer-Dependency-Installationen
V 7.0.0 des npm-CLI wartet mit einer Neuerung namens Workspaces auf. Dahinter verbergen sich eine Reihe von Features, die die Verwaltung mehrerer Packages ausgehend von einem einzelnen übergeordneten Root-Package ermöglichen sollen.
Außerdem spannend: Der Peer-Dependency-Algorithmus der neuen Version findet jetzt automatisch passende Peer-Dependencies für eure Packages, bisher mussten Entwickler diese manuell installieren.
Neues Package-Lock-Format und Unterstützung für yarn.lock
Das Package-Lock-Format wurde überarbeitet, so dass es jetzt offenbar alles enthält, was npm für die vollständige Erstellung des Package Trees benötigt. Bisher wurden yarn.lock-Dateien offenbar ignoriert, ab V7 kann der npm-Client auch daraus Paketmetadaten und Auflösungshinweise auslesen.
Internal-Refactoring
Für mehr Stabilität wurde das Innenleben des npm-Clients einem umfassenden Refactoring unterzogen. Besonderes Augenmerk lag dabei auf der Trennung von voneinander unabhängigen Funktionalitäten. Zum Beispiel wurden Inspektion und Verwaltung des Node-Modules-Tree jetzt in das Arborist-Modul verschoben. Wer sich für Details diesbezüglich interessiert: Auf dem npmjs-Blog gibt es einen Deep-Dive dazu. Derartige Veränderungen sollen auf längere Sicht für mehr Stabilität und bessere Wartbarkeit der npm-CLI-Codebase sorgen. Das für die Überarbeitung verantwortliche Produkt-Team hat V 7.0.0 laut Blogpost zum Release über die Node.js Smoke-Testing-Suite CITGM gegen 120 der am weitesten verbreiten Node-Module ausgeführt. Das erfreuliche Ergebnis: trotz massiver Änderungen am Code des CLI liefen alle davon auch in Verbindung mit V 7.0.0 wie gehabt.
Breaking Changes 😱
Ganz ohne Breaking Changes kommt die neue Version allerdings nicht aus. Darunter ist die bereits erwähnte automatische Installation sogenannter Peer Dependencies. V7 beinhaltet die Nutzung des package.exports
-Fields, require()
auf internale npm-Module anzuwenden ist deshalb in der neuen Version nicht mehr möglich. Auch wurde npx
komplett überarbeitet – der zugehörige Befehl lautet ab jetzt npm exec
, hinzu kommen verschiedene Veränderungen des Package Runners – die wohl Auffälligste ist eine Eingabeaufforderung, wenn das auszuführende Modul noch nicht installiert ist. Außerdem wurde der Output von npm audit
komplett überarbeitet. Die Einzelheiten zu allen Neuerungen und Breaking Changes sind im Detail auf dem npmjs.com-Blog nachzulesen.
Opt-In
Weil die siebte Version so viele einschneidende Veränderungen mitbringt, hat das verantwortliche Produktteam entschieden, beim Upgrade auf die neue Version vorerst einen Opt-In-Ansatz zu wählen. Für Entwickler heißt das, dass eure Projekte nicht per Default die neue Version erhalten – es sei denn, ihr installiert V 7 über npm install -g npm@7
, oder aber, ihr installiert Node.js 15.
Zum Default werden soll V 7 dann in naher Zukunft. Bevor die neue Version Eingang in einen LTS-Release von Node.js finden wird, will das Produktteam um das Tool jedoch vorerst Feedback und Bug-Reports aus der Community abwarten. Wer Ideen und Vorschläge einbringen will, findet das zugehörige RFC-Repository auf GitHub.