npm vs. yarn – Package Managers für JavaScript

Package Managers dienen dazu JavaScript Packages zu verwalten. Die 2 bekanntesten und weit verbreitetsten sind npm und yarn.

Was ist ein Package?

Packages sind JavaScript-Module, die wiederverwendbaren Code darstellen sollen.

Alle aktuell vorhandenen Packages sind hier zu finden: https://www.npmjs.com/

Jedes Package kann aber von weiteren Packages abhängig sein. Dies wird in der der package.json im Bereich „dependencies“ bzw. „devDependencies“ definiert.

Was ist npm?

npm („Node package manager“, 2010 erstmals veröffentlicht) wird standardmäßig bei jeder Installation von Node.js mitgeliefert und dient dazu Packages herunterzuladen bzw. zu verwalten.

Was ist yarn?

yarn ist ein von Facebook entwickelter Package-Manager (gleich wie npm), wird jedoch nicht standardmäßig beim installieren von Node.js dem User zur Verfügung gestellt.

Yarn wurde 2016 aus dem Problem entwickelt, dass in der Vergangenheit npm z.b. nicht sehr performant war und Features wie z.b. ein Lock-File nicht vorhanden waren.

Befehlsübersicht

Hier eine Übersicht der Befehle, die bei NPM und Yarn anders benannt wurden:

Commandnpmyarn
Install dependenciesnpm installyarn
Install packagenpm install [package]yarn add [package]
Install dev packagenpm install --save-dev [package]yarn add --dev [package]
Uninstall packagenpm uninstall [package]yarn remove [package]
Uninstall dev packagenpm uninstall --save-dev [package]yarn remove [package]
Updatenpm updateyarn upgrade
Update packagenpm update [package]yarn upgrade [package]
Global install packagenpm install --global [package]yarn global add [package]
Global uninstall packagenpm uninstall --global [package]yarn global remove [package]
https://alligator.io/nodejs/npm-yarn-cheatsheet/

Jedoch gibt es auch einige Befehle, die den gleichen Namen haben:

npmyarn
npm inityarn init
npm runyarn run
npm testyarn test
npm login (and logout)yarn login (and logout)
npm linkyarn link
npm publishyarn publish
npm cache cleanyarn cache clean
https://alligator.io/nodejs/npm-yarn-cheatsheet/

package-lock.json vs. yarn.lock

In der package.json werden die gewünschten Packages eingetragen inkl. der dafür gewünschten Versionen.

Jedoch können bei der Angabe der Version auch spezielle Zeichen angegeben werden wie z.B. *, ^ oder ~ (siehe https://devhints.io/semver für sehr gute Beispiele)

D.h. die package.json alleine ist nicht eindeutig welche Package-Version installiert werden soll.

Deshalb generiert NPM seit Version 5.x (Mai 2017) automatisch bei jedem „npm install“ automatisch eine package-lock.json.
Yarn hatte dieses Feature schon in der ersten Version inkludiert, generiert aber eine yarn.lock Datei.

Welcher ist besser?

Prinzipiell bietet yarn die gleichen Funktionalitäten an die auch bei npm zur Verfügung stehen und npm hat sehr viele Features, die nur in yarn zur Verfügung standen, selbst übernommen.

Daher ist es aktuell mehr eine persönliche Entscheidung mit welchem man gewohnt ist zu arbeiten.

Weitere Package Manager

Wie oben zu sehen gibt es für JavaScript Package Managers nicht nur eine Lösung sondern mehrere. Weitere Alternativen wären aktuell z.b.

Share this post

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.