yarn — ein alternativer Paketmanager für Node.js, entwickelt von Facebook zusammen mit Exponent, Google und Tilde im Jahr 2016. yarn löste die Geschwindigkeits- und Sicherheitsprobleme von npm 2-4: parallele Installation, strenge Lock-Datei und Offline-Cache. Heute ist yarn weiterhin beliebt in React Native, Expo und Monorepos. Erfahren Sie mehr auf yarn Documentation.
Wichtige Punkte
yarn (Yet Another Resource Negotiator) wurde im Oktober 2016 als Antwort von Facebook auf die Probleme von npm 2-4 veröffentlicht: langsame Installation, fehlende Lock-Datei und unsichere Pakete. yarn führte parallele Paketdownloads, deterministisches yarn.lock und Integritätsprüfung durch Prüfsummen ein. Im Jahr 2020 wechselte yarn zu Version 2 (Berry) mit Plug'n'Play und TypeScript-First-Ansatz.
Die Architektur von yarn unterscheidet sich von npm: yarn lädt Pakete parallel herunter (npm vor Version 5 — sequenziell), speichert jedes Paket in ~/.cache/yarn ohne Duplizierung zwischen Projekten und überprüft die Integrität über Prüfsummen. yarn generiert bei jeder Installation immer yarn.lock, während package-lock.json in npm erst in Version 5 erschien.
Ab yarn 2 (Berry, 2020) wurde yarn vollständig in TypeScript neu geschrieben und unterstützt Plug'n'Play, Workspaces, Constraints für Monorepos und Installationsprotokolle aus verschiedenen Quellen (npm, git, tarball). yarn 3+ (2022) führte Zero-Installs ein — Speichern des Caches im Repository für sofortige Installation ohne Netzwerkzugriff.
yarn install — der Hauptbefehl, der package.json und yarn.lock liest und Abhängigkeiten installiert. yarn lädt Pakete parallel herunter, was die Installation im Vergleich zu npm 4 und früheren Versionen um das 2-3-fache beschleunigt. yarn verwendet einen Offline-Cache: Wenn ein Paket bereits in einem anderen Projekt heruntergeladen wurde, wird es aus dem Cache kopiert, anstatt erneut heruntergeladen zu werden.
# Grundlegende yarn-Befehle
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# Interaktive Aktualisierung
$ yarn upgrade-interactive
# Doppelte Pakete entfernen
$ yarn dedupe
yarn add — der Befehl zum Installieren eines neuen Pakets. yarn add <package> fügt zu dependencies hinzu, yarn add --dev — zu devDependencies. yarn aktualisiert automatisch yarn.lock. yarn upgrade aktualisiert Pakete auf die neuesten Versionen innerhalb des semantischen Bereichs. yarn upgrade-interactive — ein interaktiver Modus zur Auswahl bestimmter Pakete für die Aktualisierung.
yarn cache — ein globaler Cache in ~/.cache/yarn/v6. Jedes Paket wird einmal in einem ZIP-Archiv mit einer Prüfsumme gespeichert. Der yarn-Cache wird automatisch bereinigt, aber Sie können yarn cache clean manuell ausführen. yarn cache dir zeigt den Cache-Pfad an. yarn cache list — listet zwischengespeicherte Pakete auf.
yarn.lock — eine Lock-Datei, die genaue Versionen aller Abhängigkeiten und ihrer transitiven Pakete aufzeichnet. Anders als package-lock.json (JSON) verwendet yarn.lock ein YAML-Format mit flacher Struktur. yarn.lock wird immer automatisch bei yarn install oder yarn add generiert — dies stellt sicher, dass alle Entwickler und CI-Server ein identisches Paketset erhalten.
# Beispiel einer yarn.lock-Struktur
react@^18.3.0:
version: "18.3.1"
resolution: "react@npm:18.3.1"
dependencies:
loose-envify: "^1.1.0"
checksum: "abc123def456..."
react-native@^0.76.0:
version: "0.76.3"
resolution: "react-native@npm:0.76.3"
dependencies:
react: "18.3.1"
checksum: "def789ghi012..."
yarn.lock-Felder: version — genaue Paketversion, resolution — Quelle und Version, dependencies — seine Abhängigkeiten, checksum — Prüfsumme zur Überprüfung. yarn.lock wird ins Repository committet und ist die einzige Quelle der Wahrheit für Abhängigkeiten. Wenn yarn.lock und package.json voneinander abweichen, gibt yarn eine Warnung aus.
Yarn Constraints — ein Regelsystem für Monorepos, das Abhängigkeitsversionen in yarn.lock überprüft und erzwingt. Constraints werden in der Datei yarn.constraints.js mit der Yarn Constraint Language beschrieben. Constraints ermöglichen sicherzustellen, dass alle Pakete in einem Monorepo dieselbe Version von React oder TypeScript verwenden.
React Native war traditionell eng mit yarn verbunden. Expo CLI, React Native CLI und Create React Native App verwendeten anfänglich yarn. In React Native-Projekten fixiert yarn.lock die Versionen nativer Module, was für eine stabile Kompilierung über CocoaPods (iOS) und Gradle (Android) entscheidend wichtig ist. yarn workspaces sind in React Native-Monorepos mit gemeinsamem Code beliebt.
yarn workspaces in React Native-Monorepos: Die root package.json enthält "workspaces": ["packages/*", "mobile"]. yarn install erstellt einen einzigen node_modules-Ordner auf der Root-Ebene. Pakete verweisen über Symlinks aufeinander. npx pod-install wird nach Änderungen an nativen Abhängigkeiten ausgeführt, um CocoaPods zu aktualisieren.
{
"private": true,
"workspaces": [
"packages/*",
"apps/mobile",
"apps/web"
],
"scripts": {
"mobile:start": "yarn workspace mobile start",
"mobile:ios": "yarn workspace mobile ios",
"lint": "yarn workspaces run lint"
}
}
Expo SDK 50+ empfiehlt offiziell yarn für neue Projekte, die über npx create-expo-app erstellt wurden. yarn gewährleistet Kompatibilität mit Expo-Modulen und generiert automatisch die richtige yarn.lock. Zero-Installs in yarn 3+ ermöglicht das Committen des Caches ins Repository — Entwickler erhalten eine gebrauchsfertige Umgebung ohne Installation von Abhängigkeiten nach git clone.
npm und yarn lösen dasselbe Problem — die Verwaltung von Node.js-Paketen. Mit der Veröffentlichung von npm 5-7 ist die funktionale Lücke praktisch verschwunden. npm 7+ enthält Workspaces, npm ci (äquivalent zu yarn install --frozen-lockfile) und parallele Installation. Allerdings behält yarn Vorteile in spezifischen Szenarien: Plug'n'Play, Zero-Installs und ein ausgereiftes Constraints-System.
| Merkmal | npm | yarn |
|---|---|---|
| Entstehungsjahr | 2010 | 2016 |
| Lock-Datei | package-lock.json (JSON) | yarn.lock (YAML) |
| Installation | Sequenziell (npm 5+) | Parallel |
| Plug'n'Play | Nein | Ja (yarn 2+) |
| Workspaces | Ja (npm 7+) | Ja |
| Zero-Installs | Nein | Ja (yarn 3+) |
| Cache | node_modules mit Flattening | Global ~/.cache/yarn |
| Implementierungssprache | JavaScript | TypeScript (yarn 2+) |
Wann yarn wählen: Projekte auf Expo SDK 50+, große Monorepos (100+ Pakete), Teams, die Zero-Installs für schnelle Umgebungseinrichtung schätzen, und Legacy-Projekte, die bereits yarn verwenden. Wann npm wählen: Standard-create-react-app-Projekte, Next.js, Vite, Teams ohne spezifische Paketmanager-Anforderungen.
yarn 4 (2024) führte verbesserte Leistung, native ESM-Unterstützung und Optimierung für große Monorepos ein. npm 10+ entwickelt sich mit Fokus auf Sicherheit und Kompatibilität weiter. Die Wahl zwischen npm und yarn ist heute eine Frage der Teampräferenzen und spezifischen Projektanforderungen, nicht der technischen Überlegenheit eines Tools über das andere.
Häufig gestellte Fragen
yarn übertraf npm anfangs in der Geschwindigkeit dank paralleler Paketinstallation und aggressivem Caching. yarn.lock wird bei jeder Installation automatisch generiert, während package-lock.json in npm 5 erschien. yarn bietet Plug'n'Play — eine Alternative zu node_modules mit null Installationszeit. Mit npm 7+ ist der Unterschied in Geschwindigkeit und Funktionalität für Basisszenarien minimal.
yarn workspaces — ein Mechanismus zur Verwaltung mehrerer Pakete in einem einzigen Repository. Die root package.json enthält das Feld "workspaces": ["packages/*"]. yarn install installiert gemeinsame Abhängigkeiten auf oberster Ebene in einem einzigen node_modules, erstellt Symlinks zwischen lokalen Paketen und vermeidet Duplizierung. Befehle werden für alle Workspaces über yarn workspaces run <script> ausgeführt.
Plug'n'Play (PnP) — eine Alternative zum traditionellen node_modules-Ordner, eingeführt in yarn 2. Anstatt Dateien zu kopieren, erstellt yarn eine Abhängigkeitskarte in .pnp.cjs und speichert Pakete in ZIP-Archiven in einem globalen Cache. PnP-Vorteile: Installation in Sekunden, Node.js-Startzeit um 30-50% reduziert, kein node_modules und damit verbundene Pfadprobleme.
Installieren Sie yarn global: npm install -g yarn. Führen Sie im Projektstammverzeichnis yarn import aus — yarn liest package-lock.json und erstellt ein äquivalentes yarn.lock. Löschen Sie node_modules und package-lock.json, führen Sie yarn install zur Überprüfung aus. Aktualisieren Sie die CI/CD-Konfiguration, indem Sie npm durch yarn ersetzen. yarn ist vollständig kompatibel mit package.json.
Der Fehler "Integrity check failed" tritt auf, wenn yarn.lock und node_modules nicht synchron sind. Lösung: Löschen Sie node_modules, yarn.lock und leeren Sie den Cache (yarn cache clean), führen Sie dann yarn install erneut aus. Bei Versionskonflikten verwenden Sie yarn upgrade-interactive, um bestimmte Updates auszuwählen. yarn dedupe entfernt doppelte Pakete.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch