yarn: istota, alternatywny menedżer pakietów dla React Native

Autor: IT Sectr Opublikowano: 2026-02-13 Czas czytania: 10 min

yarn — alternatywny menedżer pakietów dla Node.js, stworzony przez Facebook we współpracy z Exponent, Google i Tilde w 2016 roku. yarn rozwiązywał problemy szybkości i bezpieczeństwa npm 2-4: równoległa instalacja, ścisły plik blokady i offline'owy cache. Dziś yarn zachowuje popularność w React Native, Expo i monorepozytoriach. Więcej na yarn Documentation.

Najważniejsze

  • yarn — menedżer pakietów dla Node.js, stworzony przez Facebook w 2016 roku do rozwiązywania problemów npm
  • yarn.lock — plik blokady dokładnych wersji wszystkich zależności, tworzony automatycznie
  • yarn install — równoległa instalacja pakietów z wykorzystaniem globalnego cache bez duplikowania
  • yarn workspaces — mechanizm zarządzania monorepozytoriami ze wspólnym folderem node_modules
  • Plug'n'Play — alternatywa dla node_modules z przechowywaniem pakietów w archiwach ZIP w globalnym cache

Czym jest yarn — menedżer pakietów?

yarn (Yet Another Resource Negotiator) wydany w październiku 2016 roku jako odpowiedź Facebooka na problemy npm 2-4: powolna instalacja, brak pliku blokady i niebezpieczne pakiety. yarn zaproponował równoległe pobieranie pakietów, deterministyczny yarn.lock i weryfikację integralności za pomocą sum kontrolnych. W 2020 yarn przeszedł na wersję 2 (Berry) z Plug'n'Play i podejściem TypeScript-first.

Architektura yarn różni się od npm: yarn pobiera pakiety równolegle (npm do wersji 5 — sekwencyjnie), cache'uje każdy pakiet w ~/.cache/yarn bez duplikowania między projektami i weryfikuje integralność przez checksum. yarn zawsze generuje yarn.lock przy każdej instalacji, podczas gdy package-lock.json w npm pojawił się dopiero w wersji 5.

Począwszy od yarn 2 (Berry, 2020), yarn został całkowicie przepisany w TypeScript i obsługuje Plug'n'Play, workspaces, constraints dla monorepozytoriów oraz protokoły instalacji z różnych źródeł (npm, git, tarball). yarn 3+ (2022) dodał Zero-Installs — przechowywanie cache w repozytorium do błyskawicznej instalacji bez sieci.

Jak yarn zarządza instalacją zależności

yarn install — główne polecenie, które odczytuje package.json i yarn.lock oraz instaluje zależności. yarn pobiera pakiety równolegle, co przyspiesza instalację 2-3 razy w porównaniu z npm 4 i wcześniejszymi wersjami. yarn korzysta z offline'owego cache: jeśli pakiet został już pobrany w innym projekcie, jest kopiowany z cache, a nie pobierany ponownie.

bash
# Główne polecenia yarn
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# Aktualizacja interaktywna
$ yarn upgrade-interactive
# Usuwanie zduplikowanych pakietów
$ yarn dedupe

yarn add — polecenie do instalacji nowego pakietu. yarn add <package> dodaje do dependencies, yarn add --dev — do devDependencies. yarn automatycznie aktualizuje yarn.lock. yarn upgrade aktualizuje pakiety do najnowszych wersji w ramach zakresu semantycznego. yarn upgrade-interactive — tryb interaktywnego wyboru konkretnych pakietów do aktualizacji.

yarn cache — globalny cache w ~/.cache/yarn/v6. Każdy pakiet jest przechowywany raz w archiwum ZIP z sumą kontrolną. yarn cache czyści się automatycznie, ale można ręcznie wykonać yarn cache clean. yarn cache dir pokazuje ścieżkę do cache. yarn cache list — lista zapisanych w cache pakietów.

yarn.lock: przeznaczenie i struktura pliku

yarn.lock — plik blokady dokładnych wersji wszystkich zależności i ich pakietów przechodnich. W przeciwieństwie do package-lock.json (JSON), yarn.lock używa formatu YAML z płaską strukturą. yarn.lock jest zawsze generowany automatycznie podczas yarn install lub yarn add — gwarantuje to, że wszyscy programiści i serwery CI otrzymają identyczny zestaw pakietów.

yaml
# Przykład struktury 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..."

Pola yarn.lock: version — dokładna wersja pakietu, resolution — źródło i wersja, dependencies — jego zależności, checksum — suma kontrolna do weryfikacji. yarn.lock jest commitowany do repozytorium i stanowi jedyne źródło prawdy dla zależności. Jeśli yarn.lock i package.json są niezgodne, yarn wyświetla ostrzeżenie.

Yarn constraints — system reguł dla monorepozytoriów, który sprawdza i wymusza wersje zależności w yarn.lock. Ograniczenia opisuje się w pliku yarn.constraints.js w języku Yarn Constraint Language. Constraints pozwalają zagwarantować, że wszystkie pakiety w monorepozytorium używają tej samej wersji React lub TypeScript.

yarn w ekosystemie React Native

React Native tradycyjnie jest ściśle związany z yarn. Expo CLI, React Native CLI i Create React Native App początkowo używały yarn. W projektach React Native yarn.lock blokuje wersje modułów natywnych, co jest kluczowe dla stabilnej kompilacji przez CocoaPods (iOS) i Gradle (Android). yarn workspaces są popularne w monorepozytoriach React Native ze współdzielonym kodem.

yarn workspaces w monorepozytoriach React Native: główny package.json zawiera "workspaces": ["packages/*", "mobile"]. yarn install tworzy jeden folder node_modules na głównym poziomie. Pakiety odwołują się do siebie przez symlinki. npx pod-install jest wykonywane po zmianie zależności natywnych w celu aktualizacji 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+ oficjalnie zaleca yarn dla nowych projektów tworzonych przez npx create-expo-app. yarn zapewnia kompatybilność z modułami Expo i automatycznie generuje poprawny yarn.lock. Zero-Installs w yarn 3+ pozwala commitować cache do repozytorium — programiści otrzymują gotowe środowisko bez instalowania zależności po git clone.

yarn i npm: analiza porównawcza

npm i yarn rozwiązują to samo zadanie — zarządzanie pakietami Node.js. Od wydania npm 5-7 różnica funkcjonalna praktycznie zniknęła. npm 7+ zawiera workspaces, npm ci (odpowiednik yarn install --frozen-lockfile) i instalację równoległą. Jednak yarn zachowuje przewagę w konkretnych scenariuszach: Plug'n'Play, Zero-Installs i dojrzały system constraints.

Cechanpmyarn
Rok powstania20102016
Plik blokadypackage-lock.json (JSON)yarn.lock (YAML)
InstalacjaSekwencyjna (npm 5+)Równoległa
Plug'n'PlayNieTak (yarn 2+)
WorkspacesTak (npm 7+)Tak
Zero-InstallsNieTak (yarn 3+)
Cachenode_modules z flatteningGlobalny ~/.cache/yarn
Język implementacjiJavaScriptTypeScript (yarn 2+)

Kiedy wybrać yarn: projekty na Expo SDK 50+, duże monorepozytoria (100+ pakietów), zespoły ceniące Zero-Installs do szybkiej konfiguracji środowiska oraz projekty legacy już używające yarn. Kiedy wybrać npm: standardowe projekty create-react-app, Next.js, Vite, zespoły bez specyficznych wymagań dotyczących menedżera pakietów.

yarn 4 (2024) wprowadził ulepszoną wydajność, natywną obsługę ESM i optymalizację dla dużych monorepozytoriów. npm 10+ nadal rozwija się z naciskiem na bezpieczeństwo i kompatybilność. Wybór między npm a yarn to dziś kwestia preferencji zespołu i konkretnych wymagań projektu, a nie technicznej przewagi jednego narzędzia.

Często zadawane pytania

Jaka jest główna różnica między yarn a npm?

yarn początkowo wyprzedzał npm pod względem szybkości dzięki równoległej instalacji pakietów i agresywnemu cache'owaniu. yarn.lock jest automatycznie generowany przy każdej instalacji, podczas gdy package-lock.json pojawił się w npm 5. yarn oferuje Plug'n'Play — alternatywę dla node_modules z zerowym czasem instalacji. Od npm 7+ różnica w szybkości i funkcjonalności dla podstawowych scenariuszy jest minimalna.

Jak działają yarn workspaces w monorepozytoriach?

yarn workspaces — mechanizm zarządzania wieloma pakietami w jednym repozytorium. Główny package.json zawiera pole "workspaces": ["packages/*"]. yarn install instaluje wspólne zależności na najwyższym poziomie w jednym node_modules, tworzy symlinki między lokalnymi pakietami i unika duplikowania. Polecenia są uruchamiane dla wszystkich workspace przez yarn workspaces run <script>.

Czym jest yarn Plug'n'Play i do czego służy?

Plug'n'Play (PnP) — alternatywa dla tradycyjnego folderu node_modules, wprowadzona w yarn 2. Zamiast kopiowania plików yarn tworzy mapę zależności w .pnp.cjs i przechowuje pakiety w archiwach ZIP w globalnym cache. Zalety PnP: instalacja w kilka sekund, czas uruchamiania Node.js skrócony o 30-50%, brak node_modules i związanych z nimi problemów ze ścieżkami.

Jak migrować projekt z npm na yarn?

Zainstaluj yarn globalnie: npm install -g yarn. W katalogu głównym projektu wykonaj yarn import — yarn odczyta package-lock.json i utworzy równoważny yarn.lock. Usuń node_modules i package-lock.json, wykonaj yarn install w celu weryfikacji. Zaktualizuj konfigurację CI/CD, zastępując npm na yarn. yarn jest w pełni kompatybilny z package.json.

Jak naprawić błędy blokowania wersji w yarn?

Błąd "Integrity check failed" występuje przy niezgodności yarn.lock i node_modules. Rozwiązanie: usuń node_modules, yarn.lock i wyczyść cache (yarn cache clean), następnie wykonaj yarn install od nowa. W przypadku konfliktów wersji użyj yarn upgrade-interactive do wyboru konkretnych aktualizacji. yarn dedupe usunie zduplikowane pakiety.

Podsumowanie

  • yarn — alternatywny menedżer pakietów Node.js, stworzony przez Facebook w 2016 roku
  • yarn.lock — plik blokady dokładnych wersji wszystkich zależności w formacie YAML
  • yarn install — równoległa instalacja pakietów z wykorzystaniem globalnego offline'owego cache
  • Plug'n'Play — innowacyjny mechanizm yarn 2+ bez folderu node_modules
  • yarn workspaces — zarządzanie monorepozytoriami ze wspólnym node_modules
  • yarn w React Native — standardowy menedżer pakietów dla projektów Expo i React Native
  • Zero-Installs — commitowanie cache do repozytorium dla błyskawicznej instalacji bez pobierania pakietów

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również