yarn: lényeg, alternatív csomagkezelő React Native-hoz

Szerző: IT Sectr Megjelenés: 2026-02-13 Olvasási idő: 10 perc

yarn — egy alternatív csomagkezelő Node.js-hez, amelyet a Facebook hozott létre az Exponent, a Google és a Tilde közreműködésével 2016-ban. A yarn megoldotta az npm 2-4 sebességi és biztonsági problémáit: párhuzamos telepítés, szigorú lock-fájl és offline gyorsítótár. Ma a yarn népszerű a React Native, az Expo és a monorepozitóriumok körében. Bővebben — a yarn Documentation oldalon.

Főbb pontok

  • yarn — Node.js csomagkezelő, amelyet a Facebook hozott létre 2016-ban az npm problémáinak megoldására
  • yarn.lock — az összes függőség pontos verzióját rögzítő fájl, automatikusan létrehozva
  • yarn install — csomagok párhuzamos telepítése globális gyorsítótár használatával, ismétlés nélkül
  • yarn workspaces — monorepozitóriumok kezelésének mechanizmusa közös node_modules mappával
  • Plug'n'Play — alternatíva a node_modules helyett, a csomagokat ZIP-archívumokban tárolva a globális gyorsítótárban

Mi az a yarn — csomagkezelő?

yarn (Yet Another Resource Negotiator) 2016 októberében jelent meg a Facebook válaszaként az npm 2-4 problémáira: lassú telepítés, lock-fájl hiánya és nem biztonságos csomagok. A yarn párhuzamos csomagletöltést, determinisztikus yarn.lock-ot és integritásellenőrzést kínált ellenőrző összegek segítségével. 2020-ban a yarn áttért a 2-es verzióra (Berry) Plug'n'Play-jel és TypeScript-first megközelítéssel.

A yarn architektúrája eltér az npm-től: a yarn párhuzamosan tölti le a csomagokat (az npm az 5-ös verzióig szekvenciálisan), minden csomagot a ~/.cache/yarn mappában gyorsítótárba helyez a projektek közötti ismétlés nélkül, és checksum segítségével ellenőrzi az integritást. A yarn minden telepítéskor létrehozza a yarn.lock fájlt, míg a package-lock.json az npm-ben csak az 5-ös verzióban jelent meg.

A yarn 2-től (Berry, 2020) kezdve a yarn teljesen át lett írva TypeScript-ben, és támogatja a Plug'n'Play-t, a workspaces-t, a monorepozitóriumokhoz constraints-t és a különböző forrásokból (npm, git, tarball) történő telepítési protokollokat. A yarn 3+ (2022) hozzáadta a Zero-Installs funkciót — a gyorsítótár tárolását a repozitóriumban a hálózat nélküli azonnali telepítéshez.

Hogyan kezeli a yarn a függőségek telepítését

yarn install — a fő parancs, amely beolvassa a package.json-t és a yarn.lock-ot, és telepíti a függőségeket. A yarn párhuzamosan tölti le a csomagokat, ami 2-3-szor gyorsabb telepítést eredményez az npm 4-hez és korábbi verziókhoz képest. A yarn offline gyorsítótárat használ: ha egy csomagot már letöltöttek egy másik projektben, a gyorsítótárból másolja, nem tölti le újra.

bash
# A yarn fő parancsai
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# Interaktív frissítés
$ yarn upgrade-interactive
# Duplikált csomagok eltávolítása
$ yarn dedupe

yarn add — parancs új csomag telepítéséhez. yarn add <package> hozzáadja a dependencies-hez, a yarn add --dev — a devDependencies-hez. A yarn automatikusan frissíti a yarn.lock-ot. yarn upgrade frissíti a csomagokat a legújabb verziókra a szemantikus tartományon belül. yarn upgrade-interactive — interaktív mód a frissítendő csomagok kiválasztásához.

yarn cache — globális gyorsítótár a ~/.cache/yarn/v6 mappában. Minden csomag egyszer kerül tárolásra egy ZIP-archívumban ellenőrző összeggel. A yarn cache automatikusan tisztul, de manuálisan is végrehajtható a yarn cache clean parancs. A yarn cache dir megmutatja a gyorsítótár elérési útját. A yarn cache list — a gyorsítótárazott csomagok listája.

yarn.lock: a fájl célja és szerkezete

yarn.lock — fájl az összes függőség és tranzitív csomagjaik pontos verziójának rögzítésére. A package-lock.json-tól (JSON) eltérően a yarn.lock YAML formátumot használ lapos szerkezettel. A yarn.lock mindig automatikusan létrejön yarn install vagy yarn add során — ez garantálja, hogy minden fejlesztő és CI-szerver azonos csomagkészletet kapjon.

yaml
# Példa a yarn.lock szerkezetére
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..."

A yarn.lock mezői: version — a csomag pontos verziója, resolution — forrás és verzió, dependencies — függőségei, checksum — ellenőrző összeg a verifikációhoz. A yarn.lock a repozitóriumba kerül commitelésre, és ez az egyetlen igazságforrás a függőségek számára. Ha a yarn.lock és a package.json eltér, a yarn figyelmeztetést ad ki.

Yarn constraints — szabályrendszer a monorepozitóriumok számára, amely ellenőrzi és kikényszeríti a függőségek verzióit a yarn.lock-ban. A korlátozások a yarn.constraints.js fájlban írhatók le a Yarn Constraint Language segítségével. A Constraints lehetővé teszi annak garantálását, hogy a monorepozitóriumban lévő összes csomag ugyanazt a React vagy TypeScript verziót használja.

yarn a React Native ökoszisztémában

React Native hagyományosan szorosan kapcsolódik a yarn-hoz. Az Expo CLI, a React Native CLI és a Create React Native App eredetileg yarn-t használt. A React Native projektekben a yarn.lock rögzíti a natív modulok verzióit, ami kritikus a stabil fordításhoz CocoaPods (iOS) és Gradle (Android) segítségével. A yarn workspaces népszerű a megosztott kóddal rendelkező React Native monorepozitóriumokban.

yarn workspaces a React Native monorepozitóriumokban: a gyökér package.json tartalmazza a "workspaces": ["packages/*", "mobile"] mezőt. A yarn install egyetlen node_modules mappát hoz létre a gyökér szinten. A csomagok symlinkeken keresztül hivatkoznak egymásra. A npx pod-install a natív függőségek módosítása után fut a CocoaPods frissítéséhez.

json
{
  "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+ hivatalosan ajánlja a yarn-t a npx create-expo-app segítségével létrehozott új projektekhez. A yarn biztosítja a kompatibilitást az Expo-modulokkal, és automatikusan létrehozza a helyes yarn.lock-ot. A Zero-Installs a yarn 3+-ban lehetővé teszi a gyorsítótár commitelését a repozitóriumba — a fejlesztők kész környezetet kapnak a git clone után anélkül, hogy függőségeket kellene telepíteniük.

yarn és npm: összehasonlító elemzés

npm és a yarn ugyanazt a feladatot oldja meg — a Node.js-csomagok kezelését. Az npm 5-7 megjelenésével a funkcionális különbség gyakorlatilag eltűnt. Az npm 7+ tartalmazza a workspaces-t, az npm ci-t (a yarn install --frozen-lockfile megfelelője) és a párhuzamos telepítést. A yarn azonban megőrzi előnyeit bizonyos forgatókönyvekben: Plug'n'Play, Zero-Installs és az érett constraints rendszer.

Jellemzőnpmyarn
Létrehozás éve20102016
Lock-fájlpackage-lock.json (JSON)yarn.lock (YAML)
TelepítésSzekvenciális (npm 5+)Párhuzamos
Plug'n'PlayNemIgen (yarn 2+)
WorkspacesIgen (npm 7+)Igen
Zero-InstallsNemIgen (yarn 3+)
Gyorsítótárnode_modules flatteninggelGlobális ~/.cache/yarn
Implementációs nyelvJavaScriptTypeScript (yarn 2+)

Mikor válasszuk a yarn-t: Expo SDK 50+ projektek, nagy monorepozitóriumok (100+ csomag), csapatok, akik értékelik a Zero-Installs-t a gyors környezetbeállításhoz, és örökölt projektek, amelyek már yarn-t használnak. Mikor válasszuk az npm-et: szabványos create-react-app, Next.js, Vite projektek, csapatok különösebb csomagkezelői követelmények nélkül.

yarn 4 (2024) javított teljesítményt, natív ESM-támogatást és optimalizálást hozott a nagy monorepozitóriumok számára. Az npm 10+ tovább fejlődik a biztonságra és kompatibilitásra összpontosítva. A választás npm és yarn között ma csapatpreferenciák és a projekt konkrét követelményeinek kérdése, nem pedig egy eszköz technikai fölénye.

Gyakran Ismételt Kérdések

Mi a fő különbség a yarn és az npm között?

yarn kezdetben felülmúlta az npm-et sebességben a csomagok párhuzamos telepítésének és az agresszív gyorsítótárazásnak köszönhetően. A yarn.lock minden telepítéskor automatikusan létrejön, míg a package-lock.json az npm 5-ben jelent meg. A yarn Plug'n'Play-t kínál — egy alternatívát a node_modules helyett nulla telepítési idővel. Az npm 7+ óta a sebességbeli és funkcionális különbség az alapszintű forgatókönyvekben minimális.

Hogyan működnek a yarn workspaces a monorepozitóriumokban?

yarn workspaces — mechanizmus több csomag kezelésére egyetlen repozitóriumban. A gyökér package.json tartalmazza a "workspaces": ["packages/*"] mezőt. A yarn install a közös függőségeket a felső szinten egyetlen node_modules mappába telepíti, symlinkeket hoz létre a helyi csomagok között, és elkerüli az ismétlődést. Parancsok az összes workspace-re a yarn workspaces run <script> segítségével futtathatók.

Mi az a yarn Plug'n'Play és mire való?

Plug'n'Play (PnP) — alternatíva a hagyományos node_modules mappa helyett, amely a yarn 2-ben jelent meg. A fájlok másolása helyett a yarn egy függőségi térképet hoz létre a .pnp.cjs-ben, és a csomagokat ZIP-archívumokban tárolja a globális gyorsítótárban. A PnP előnyei: telepítés másodpercek alatt, a Node.js indulási idejének 30-50%-os csökkenése, a node_modules és a kapcsolódó elérésiút-problémák hiánya.

Hogyan migrálhatok egy projektet npm-ről yarn-ra?

Telepítse a yarn-t globálisan: npm install -g yarn. A projekt gyökerében futtassa a yarn import parancsot — a yarn beolvassa a package-lock.json-t, és létrehozza a megfelelő yarn.lock-ot. Törölje a node_modules-t és a package-lock.json-t, futtassa a yarn install parancsot az ellenőrzéshez. Frissítse a CI/CD konfigurációt, cserélje le az npm-et yarn-ra. A yarn teljesen kompatibilis a package.json-nel.

Hogyan javítsam a verziózárási hibákat a yarn-ban?

Az "Integrity check failed" hiba akkor fordul elő, ha a yarn.lock és a node_modules nem egyezik. Megoldás: törölje a node_modules-t és a yarn.lock-ot, ürítse ki a gyorsítótárat (yarn cache clean), majd futtassa újra a yarn install parancsot. Verzióütközések esetén használja a yarn upgrade-interactive parancsot a konkrét frissítések kiválasztásához. A yarn dedupe eltávolítja a duplikált csomagokat.

Összegzés

  • yarn — alternatív Node.js csomagkezelő, amelyet a Facebook hozott létre 2016-ban
  • yarn.lock — az összes függőség pontos verzióját YAML formátumban rögzítő fájl
  • yarn install — csomagok párhuzamos telepítése globális offline gyorsítótár használatával
  • Plug'n'Play — a yarn 2+ innovatív mechanizmusa node_modules mappa nélkül
  • yarn workspaces — monorepozitóriumok kezelése egyetlen node_modules-szal
  • yarn a React Native-ben — szabványos csomagkezelő Expo és React Native projektekhez
  • Zero-Installs — gyorsítótár commitelése a repozitóriumba a csomagok letöltése nélküli azonnali telepítéshez

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is