yarn: esența, managerul de pachete alternativ pentru React Native

Autor: IT Sectr Publicat: 2026-02-13 Timp de citire: 10 min

yarn — un manager de pachete alternativ pentru Node.js, creat de Facebook împreună cu Exponent, Google și Tilde în 2016. yarn rezolva problemele de viteză și securitate ale npm 2-4: instalare paralelă, fișier de blocare strict și cache offline. Astăzi yarn își păstrează popularitatea în React Native, Expo și monorepozitorii. Mai multe pe yarn Documentation.

Principalele puncte

  • yarn — manager de pachete pentru Node.js, creat de Facebook în 2016 pentru a rezolva problemele npm
  • yarn.lock — fișier de fixare a versiunilor exacte ale tuturor dependențelor, creat automat
  • yarn install — instalare paralelă a pachetelor utilizând cache-ul global fără duplicare
  • yarn workspaces — mecanism de gestionare a monorepozitoriilor cu un folder comun node_modules
  • Plug'n'Play — alternativă la node_modules cu stocarea pachetelor în arhive ZIP în cache-ul global

Ce este yarn — managerul de pachete?

yarn (Yet Another Resource Negotiator) lansat în octombrie 2016 ca răspuns al Facebook la problemele npm 2-4: instalare lentă, lipsa fișierului de blocare și pachete nesigure. yarn a propus încărcarea paralelă a pachetelor, yarn.lock determinist și verificarea integrității prin sume de control. În 2020 yarn a trecut la versiunea 2 (Berry) cu Plug'n'Play și abordare TypeScript-first.

Arhitectura yarn diferă de npm: yarn încarcă pachetele în paralel (npm până la versiunea 5 — secvențial), cache-ază fiecare pachet în ~/.cache/yarn fără duplicare între proiecte și verifică integritatea prin checksum. yarn generează întotdeauna yarn.lock la orice instalare, în timp ce package-lock.json în npm a apărut doar în versiunea 5.

Începând cu yarn 2 (Berry, 2020), yarn a fost rescris complet în TypeScript și suportă Plug'n'Play, workspaces, constraints pentru monorepozitorii și protocoale de instalare din diferite surse (npm, git, tarball). yarn 3+ (2022) a adăugat Zero-Installs — stocarea cache-ului în repository pentru instalare instantanee fără rețea.

Cum gestionează yarn instalarea dependențelor

yarn install — comanda principală care citește package.json și yarn.lock și instalează dependențele. yarn încarcă pachetele în paralel, ceea ce accelerează instalarea de 2-3 ori comparativ cu npm 4 și versiunile anterioare. yarn utilizează cache-ul offline: dacă un pachet a fost deja descărcat în alt proiect, este copiat din cache, nu descărcat din nou.

bash
# Comenzile principale yarn
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# Actualizare interactivă
$ yarn upgrade-interactive
# Eliminarea pachetelor duplicate
$ yarn dedupe

yarn add — comanda pentru instalarea unui pachet nou. yarn add <package> adaugă în dependencies, yarn add --dev — în devDependencies. yarn actualizează automat yarn.lock. yarn upgrade actualizează pachetele la cele mai recente versiuni în intervalul semantic. yarn upgrade-interactive — modul interactiv de selectare a pachetelor specifice pentru actualizare.

yarn cache — cache-ul global în ~/.cache/yarn/v6. Fiecare pachet este stocat o singură dată într-o arhivă ZIP cu sumă de control. yarn cache se curăță automat, dar se poate executa yarn cache clean manual. yarn cache dir arată calea către cache. yarn cache list — lista pachetelor din cache.

yarn.lock: scopul și structura fișierului

yarn.lock — fișier de fixare a versiunilor exacte ale tuturor dependențelor și pachetelor lor tranzitive. Spre deosebire de package-lock.json (JSON), yarn.lock utilizează formatul YAML cu o structură plată. yarn.lock este întotdeauna generat automat la yarn install sau yarn add — aceasta garantează că toți dezvoltatorii și serverele CI primesc același set de pachete.

yaml
# Exemplu de structură yarn.lock
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..."

Câmpurile yarn.lock: version — versiunea exactă a pachetului, resolution — sursa și versiunea, dependencies — dependențele sale, checksum — suma de control pentru verificare. yarn.lock este comis în repository și este singura sursă de adevăr pentru dependențe. Dacă yarn.lock și package.json nu coincid, yarn emite un avertisment.

Yarn constraints — sistem de reguli pentru monorepozitorii care verifică și impune versiunile dependențelor în yarn.lock. Restricțiile sunt descrise în fișierul yarn.constraints.js în Yarn Constraint Language. Constraints permit garantarea că toate pachetele din monorepozitoriu utilizează aceeași versiune de React sau TypeScript.

yarn în ecosistemul React Native

React Native este în mod tradițional strâns legat de yarn. Expo CLI, React Native CLI și Create React Native App au folosit inițial yarn. În proiectele React Native, yarn.lock fixează versiunile modulelor native, ceea ce este critic pentru compilarea stabilă prin CocoaPods (iOS) și Gradle (Android). yarn workspaces sunt populare în monorepozitoriile React Native cu cod partajat.

yarn workspaces în monorepozitoriile React Native: package.json rădăcină conține "workspaces": ["packages/*", "mobile"]. yarn install creează un singur folder node_modules la nivelul rădăcină. Pachetele se referă unele la altele prin symlinkuri. npx pod-install se execută după modificarea dependențelor native pentru actualizarea CocoaPods.

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+ recomandă oficial yarn pentru proiectele noi create prin npx create-expo-app. yarn asigură compatibilitatea cu modulele Expo și generează automat yarn.lock corect. Zero-Installs în yarn 3+ permite comiterea cache-ului în repository — dezvoltatorii primesc un mediu gata fără instalarea dependențelor după git clone.

yarn și npm: analiză comparativă

npm și yarn rezolvă aceeași sarcină — gestionarea pachetelor Node.js. Odată cu lansarea npm 5-7, diferența funcțională a dispărut practic. npm 7+ include workspaces, npm ci (echivalentul yarn install --frozen-lockfile) și instalare paralelă. Cu toate acestea, yarn păstrează avantaje în scenarii specifice: Plug'n'Play, Zero-Installs și un sistem matur de constraints.

Caracteristicănpmyarn
Anul creării20102016
Fișier de blocarepackage-lock.json (JSON)yarn.lock (YAML)
InstalareSecvențială (npm 5+)Paralelă
Plug'n'PlayNuDa (yarn 2+)
WorkspacesDa (npm 7+)Da
Zero-InstallsNuDa (yarn 3+)
Cachenode_modules cu flatteningGlobal ~/.cache/yarn
Limbaj de implementareJavaScriptTypeScript (yarn 2+)

Când să alegeți yarn: proiecte pe Expo SDK 50+, monorepozitorii mari (100+ pachete), echipe care apreciază Zero-Installs pentru configurarea rapidă a mediului și proiecte moștenite care folosesc deja yarn. Când să alegeți npm: proiecte standard create-react-app, Next.js, Vite, echipe fără cerințe specifice față de managerul de pachete.

yarn 4 (2024) a introdus performanță îmbunătățită, suport nativ ESM și optimizare pentru monorepozitorii mari. npm 10+ continuă să se dezvolte cu accent pe securitate și compatibilitate. Alegerea între npm și yarn astăzi este o chestiune de preferințe ale echipei și cerințe specifice ale proiectului, nu de superioritate tehnică a unui instrument.

Întrebări frecvente

Care este principala diferență dintre yarn și npm?

yarn a depășit inițial npm în viteză datorită instalării paralele a pachetelor și cache-ului agresiv. yarn.lock este generat automat la orice instalare, în timp ce package-lock.json a apărut în npm 5. yarn oferă Plug'n'Play — o alternativă la node_modules cu timp de instalare zero. Cu npm 7+ diferența de viteză și funcționalitate pentru scenariile de bază este minimă.

Cum funcționează yarn workspaces în monorepozitorii?

yarn workspaces — mecanism de gestionare a mai multor pachete într-un singur repository. package.json rădăcină conține câmpul "workspaces": ["packages/*"]. yarn install instalează dependențele comune la nivelul superior într-un singur node_modules, creează symlinkuri între pachetele locale și evită duplicarea. Comenzile se execută pentru toate workspace-urile prin yarn workspaces run <script>.

Ce este yarn Plug'n'Play și la ce servește?

Plug'n'Play (PnP) — o alternativă la folderul tradițional node_modules, introdusă în yarn 2. În loc să copieze fișiere, yarn creează o hartă a dependențelor în .pnp.cjs și stochează pachetele în arhive ZIP în cache-ul global. Avantajele PnP: instalare în câteva secunde, timpul de pornire a Node.js se reduce cu 30-50%, absența node_modules și a problemelor de căi asociate.

Cum se migrează un proiect de la npm la yarn?

Instalați yarn global: npm install -g yarn. În rădăcina proiectului executați yarn import — yarn va citi package-lock.json și va crea un yarn.lock echivalent. Ștergeți node_modules și package-lock.json, executați yarn install pentru verificare. Actualizați configurația CI/CD, înlocuind npm cu yarn. yarn este complet compatibil cu package.json.

Cum se repară erorile de blocare a versiunilor în yarn?

Eroarea "Integrity check failed" apare la nepotrivirea dintre yarn.lock și node_modules. Soluție: ștergeți node_modules, yarn.lock și goliți cache-ul (yarn cache clean), apoi executați yarn install din nou. Pentru conflicte de versiuni utilizați yarn upgrade-interactive pentru a selecta actualizări specifice. yarn dedupe va elimina pachetele duplicate.

Concluzii

  • yarn — manager de pachete alternativ pentru Node.js, creat de Facebook în 2016
  • yarn.lock — fișier de fixare a versiunilor exacte ale tuturor dependențelor în format YAML
  • yarn install — instalare paralelă a pachetelor utilizând cache-ul global offline
  • Plug'n'Play — mecanism inovator yarn 2+ fără folder node_modules
  • yarn workspaces — gestionarea monorepozitoriilor cu un singur node_modules
  • yarn în React Native — managerul standard de pachete pentru proiecte Expo și React Native
  • Zero-Installs — comiterea cache-ului în repository pentru instalare instantanee fără descărcarea pachetelor

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și