Stack update 2016: Von NPM zu Yarn - Vorteile und erste Eindrücke des neuen Package Managers

Stack update 2016: Von NPM zu Yarn - Vorteile und erste Eindrücke des neuen Package Managers

Tl;dr: Verwendet Yarn - Er ist schneller und der Umstieg denkbar einfach

Altes Tooling: NPM

NPM (node package manager) ist der offizielle Package Manager von node.js. In seiner alten Version 2 hatte er einige große Nachteile die aber in Version 3 großteils komplett beseitigt wurden (besonders das neue Ablageschema in einem Quellordner ist hervorzuheben).

Wir verwenden npm normalerweise in Kombination mit npm-check-updates um regelmässig die minimalen Paketversionen anzugleichen um den Ärger zu minimieren wenn eine Bibliothek plötzich neue Versionen der Hälfte der Pakete braucht.

Neues Tooling: Yarn

Yarn ist das neueste und tollste tool für Package management und ging aus einer Kooperation von Facebook, Exponent, Google und Tilde hervor. Yarn unterstützt neben der NPM auch die Bower registry (was nicht unendlich nützlich ist, da die meisten Packages seit NPM 3 sowieso auch in der NPM registry zu finden sind).

Yarn versorgt uns mit ein paar Nettigkeiten, die das Tool zu einer guten Wahl machen:

  • Lokales Zwischenspeichern von Paketen und Offline-Support will man schon nach kurzer Zeit nicht mehr missen, da Pakete so nicht mehr unnütz für verschiedene individuelle Projekte heruntergeladen werden müssen.
  • Verbesserte Performance macht sich stark bemerkbar, da Pakete parallel heruntergeladen und installiert werden. Dies hat zwar hin und wieder Quirks, sollte aber nur in absoluten Ausnahmefällen zu einem Problem werden.
  • Lockfile-Unterstützung (beispielsweise aus PHPs Composer bekannt) ist eine wertvolle Neuerung, da dies die Stabilität von Paketkonfigurationen stark erhöht und Inkompatibilitäten mit verschiedenen Paketversionen vermeidet.
  • Verbesserte Sicherheit durch Checksum-Checking. Ein sehr realistischer Angriffsvektor einfach behoben.

Allgemein ein guter Deal, besonders da der Wechsel sehr einfach zu machen ist. Yarn verwendet das standard npm package.json-Format. Allerdings bestehen noch ein paar Gotchas bei der direkten Einbindung von Git-Repos (was wir stark für die Einbindung interner Pakete verwenden) welche in diesem Issue. diskutiert werden.

Fazit

Yarn behebt viele Probleme, die mir kaum bewusst waren: Die bessere Performance und das Caching sorgen für flüssigere DX und der Lockfile-Support macht den Umgang mit älteren Projekten um einiges leichter (Lockfile committen nicht vergessen!). Bleibt zu hoffen, dass das Tool in der Community entsprechende Verbreitung findet!

Falls du Fragen oder Hinweise hast, freue ich mich auf Twitter. von Dir zu hören!