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 (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.
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.
# 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 — 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.
# 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.
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.
{
"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.
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ő | npm | yarn |
|---|---|---|
| Létrehozás éve | 2010 | 2016 |
| Lock-fájl | package-lock.json (JSON) | yarn.lock (YAML) |
| Telepítés | Szekvenciális (npm 5+) | Párhuzamos |
| Plug'n'Play | Nem | Igen (yarn 2+) |
| Workspaces | Igen (npm 7+) | Igen |
| Zero-Installs | Nem | Igen (yarn 3+) |
| Gyorsítótár | node_modules flatteninggel | Globális ~/.cache/yarn |
| Implementációs nyelv | JavaScript | TypeScript (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
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.
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.
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.
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.
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
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.
Olvassa el is