Auch wenn das Angular-CLI ein sehr komfortables Tool zur Entwicklung von Angular Anwendungen ist, werden Sie bei der Arbeit mit den Beispielquelltexten eventuell schon bermerkt haben, dass insbesondere das initiale installieren der Abhängigkeiten über npm install
durchaus einige Zeit in Ansprunch nehmen kann.
Genau an dieser Stelle setzt der von Facebook entwickelte Packagemanager yarn an. So wirbt das Tool auf der Projektseite https://yarnpkg.com/ mit dem Slogan:
FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT.
Möchten Sie yarn nun für die Installation und das Management Ihrer Abhänigkeiten verwenden, so müssen Sie zunächst einmal global auf Ihrem System installieren. Neben der Möglichkeit das Tool über Betriebssystem eigene Packet-Manager zu installieren, ist außerdem auch eine Installation per npm möglich:
npm install -g yarn
Wechseln Sie nun in ein beliebiges npm-Projekt (also auch in ein beliebiges Angular-CLI-Projekt) und führen dort den Befehl
yarn
aus, so werden Sie feststellen, dass das Tool ohne weitere Maßnahmen damit beginnt, die Abhänigkeiten Ihres Projektes herunterzuladen und im node_modules
-Ordner abzulegen. Der Grund hierfür liegt darin, dass yarn ebenfalls die Datei package.json
als Grundlage für die Konfiguration der Abhängigkeiten verwendet.
Geschwindigkeit
An dieser Stelle werden Sie bereits merken, dass die Installation der Abhängikeiten deutlich schneller vonstatten geht als bei der Installation über npm. Der Performance-Gewinn basiert dabei im wesentlichen auf 2 Tatsachen
- yarn parallelisiert die Installation von Abhängigkeiten.
- Auf Basis eines globalen Caches stehen alle Abhängigkeiten die bereits einmal installiert wurden sehr schnell für andere Projekte zur Verfügung.
So konnte ich bei der Installation der Abhänigkeiten des Formular-Kapitel-Beispiels-Codes durch die Verwendung von yarn die folgenden Geschwindigkeitssteigerungen erzielen:
npm | yarn | |
---|---|---|
erste Installation der Abhängigkeiten | 57 Sek. | 24 Sek. |
erneute Installation der Abhängigkeiten (nach dem Löschen des node_modules-Verzeichnisses) | 57 Sek. | 10 Sek. |
anschließende Installation der Abhängigkeiten des Sprachkern-Kapitels | 57 Sek. | 12 Sek. |
Verlässlichkeit
Ein Blick in das Projektverzeichnis wird Ihnen außerdem eine weitere Neuerung zeigen. So werden Sie dort nun die datei yarn.lock
finden. Diese Datei hat die Aufgabe für jede Abhängigkeit exakt festzulegen welche Version installiert werden soll und wo die Datei zu finden ist. Das folgende Listing zeigt einen typischen Eintrag der yarn.lock
:
"@angular/core@^2.4.3":
version "2.4.4"
resolved "https://registry.yarnpkg.com/@angular/core/-/core-2.4.4.tgz#eafef7bbdefea321fa5e79998bb2f6707c70729d"
So ist es bei der Arbeit mit npm üblich nicht exakte Versionsnummern der Form
"dependencies": {
"@angular/core": "^2.4.3",
...
},
zu hinterlegen. Diese Technik ist zwar einerseits insofern bequem, dass Sie ohne Änderungen der Konfiguration immer weiter mit Versions-Updates versorgt werden. Auf der anderen Seite kann der Verzicht auf exakte Versionsnummern aber auch dazu führen, dass Sie auf Ihrem Rechner eine völlig andere Software kompilieren als der Kollege am nächsten Schreibtisch. Hier sorgt die yarn.lock
dafür, dass Sie sich in jedem Fall darauf verlassen können, dass Abängigkeiten die eimmal über yarn installiert werden konnten auch in Zukunft stabil bleiben.
Fazit
Auch wenn sich npm in den letzten Jahren immer mehr zum defacto-Standard für die Installation von JavaScript-Abhänigkeiten entwickelt hat, kann insbesondere der unbedachte Einsatz von nicht exakten Versionsnummer schnell zu Chaos in Ihrer Build-Chain führen. yarn schafft hier Abhilfe und sorgt gleichzeitig noch für eine deutlichere Performancesteigerung bei der Installation. Insbesondere bei der Arbeit mit einer Vielzahl von Projekten - wie z.B. bei der Arbeit mit den Beispielquelltexten des Buches - kann yarn somit für eine echte Arbeitserleichtung sorgen!