Table of Contents
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:
Command | npm | yarn |
---|---|---|
Install dependencies | npm install | yarn |
Install package | npm install [package] | yarn add [package] |
Install dev package | npm install --save-dev [package] | yarn add --dev [package] |
Uninstall package | npm uninstall [package] | yarn remove [package] |
Uninstall dev package | npm uninstall --save-dev [package] | yarn remove [package] |
Update | npm update | yarn upgrade |
Update package | npm update [package] | yarn upgrade [package] |
Global install package | npm install --global [package] | yarn global add [package] |
Global uninstall package | npm uninstall --global [package] | yarn global remove [package] |
Jedoch gibt es auch einige Befehle, die den gleichen Namen haben:
npm | yarn |
---|---|
npm init | yarn init |
npm run | yarn run |
npm test | yarn test |
npm login (and logout ) | yarn login (and logout ) |
npm link | yarn link |
npm publish | yarn publish |
npm cache clean | yarn cache clean |
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.