yarn: суштина, алтернативни менаџер пакета за React Native

Аутор: IT Sectr Објављено: 2026-02-13 Време читања: 10 мин

yarn — алтернативни менаџер пакета за Node.js, креиран од стране Facebook-а заједно са Exponent, Google и Tilde 2016. године. yarn је рјешавао проблеме брзине и безбједности npm 2-4: паралелна инсталација, строги lock-фајл и офлајн кеш. Данас yarn задржава популарност у React Native, Expo и монорепозиторијумима. Детаљније на yarn Documentation.

Главно

  • yarn — менаџер пакета за Node.js, креиран од стране Facebook-а 2016. године за рјешавање проблема npm-а
  • yarn.lock — фајл за фиксирање тачних верзија свих зависности, креиран аутоматски
  • yarn install — паралелна инсталација пакета коришћењем глобалног кеша без дуплирања
  • yarn workspaces — механизам управљања монорепозиторијумима са заједничким node_modules фолдером
  • Plug'n'Play — алтернатива node_modules са чувањем пакета у ZIP архивама у глобалном кешу

Шта је yarn — менаџер пакета?

yarn (Yet Another Resource Negotiator) објављен је октобра 2016. године као одговор Facebook-а на проблеме npm 2-4: спора инсталација, недостатак lock-фајла и небезбједни пакети. yarn је понудио паралелно преузимање пакета, детерминистички yarn.lock и провјеру интегритета путем контролних сума. 2020. године yarn је прешао на верзију 2 (Berry) са Plug'n'Play и TypeScript-first приступом.

Архитектура yarn-а се разликује од npm-а: yarn преузима пакете паралелно (npm до верзије 5 — секвенцијално), кешира сваки пакет у ~/.cache/yarn без дуплирања између пројеката и провјерава интегритет путем checksum-а. yarn увијек генерише yarn.lock при свакој инсталацији, док се package-lock.json у npm-у појавио тек у верзији 5.

Почевши од yarn 2 (Berry, 2020), yarn је потпуно преписан у TypeScript-у и подржава Plug'n'Play, workspaces, constraints за монорепозиторијуме и протоколе инсталације из различитих извора (npm, git, tarball). yarn 3+ (2022) је додао Zero-Installs — чување кеша у репозиторијуму за тренутну инсталацију без мреже.

Како yarn управља инсталацијом зависности

yarn install — основна команда која чита package.json и yarn.lock и инсталира зависности. yarn преузима пакете паралелно, што убрзава инсталацију 2-3 пута у поређењу са npm 4 и ранијим верзијама. yarn користи офлајн кеш: ако је пакет већ преузет у другом пројекту, копира се из кеша, а не преузима поново.

bash
# Главне yarn команде
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# Интерактивно ажурирање
$ yarn upgrade-interactive
# Уклањање дуплираних пакета
$ yarn dedupe

yarn add — команда за инсталацију новог пакета. yarn add <package> додаје у dependencies, yarn add --dev — у devDependencies. yarn аутоматски ажурира yarn.lock. yarn upgrade ажурира пакете до најновијих верзија у оквиру семантичког опсега. yarn upgrade-interactive — интерактивни режим избора конкретних пакета за ажурирање.

yarn cache — глобални кеш у ~/.cache/yarn/v6. Сваки пакет се чува једном у ZIP архиви са контролном сумом. yarn cache се чисти аутоматски, али се може извршити yarn cache clean ручно. yarn cache dir показује путању до кеша. yarn cache list — листа кешираних пакета.

yarn.lock: намјена и структура фајла

yarn.lock — фајл за фиксирање тачних верзија свих зависности и њихових транзитивних пакета. За разлику од package-lock.json (JSON), yarn.lock користи YAML формат са равном структуром. yarn.lock се увијек генерише аутоматски при yarn install или yarn add — ово гарантује да сви програмери и CI сервери добијају идентичан скуп пакета.

yaml
# Примјер структуре 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..."

Поља yarn.lock-а: version — тачна верзија пакета, resolution — извор и верзија, dependencies — његове зависности, checksum — контролна сума за верификацију. yarn.lock се комитује у репозиторијум и представља једини извор истине за зависности. Ако се yarn.lock и package.json разилазе, yarn издаје упозорење.

Yarn constraints — систем правила за монорепозиторијуме који провјерава и присилно задаје верзије зависности у yarn.lock-у. Ограничења се описују у фајлу yarn.constraints.js на Yarn Constraint Language-у. Constraints омогућавају гарантовање да сви пакети у монорепозиторијуму користе исту верзију React-а или TypeScript-а.

yarn у екосистему React Native

React Native традиционално је тијесно повезан са yarn-ом. Expo CLI, React Native CLI и Create React Native App су првобитно користили yarn. У React Native пројектима yarn.lock фиксира верзије native модула, што је критично за стабилну компилацију путем CocoaPods (iOS) и Gradle (Android). yarn workspaces су популарни у React Native монорепозиторијумима са заједничким кодом.

yarn workspaces у React Native монорепозиторијумима: коријенски package.json садржи "workspaces": ["packages/*", "mobile"]. yarn install креира јединствени node_modules фолдер на коријенском нивоу. Пакети се позивају једни на друге путем симлинкова. npx pod-install се извршава након промјене native зависности за ажурирање 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+ званично препоручује yarn за нове пројекте креиране путем npx create-expo-app. yarn обезбјеђује компатибилност са Expo модулима и аутоматски генерише исправан yarn.lock. Zero-Installs у yarn 3+ омогућава комитовање кеша у репозиторијум — програмери добијају готово окружење без инсталације зависности након git clone.

yarn и npm: упоредна анализа

npm и yarn рјешавају исти задатак — управљање пакетима Node.js-а. Са изласком npm 5-7 функционални јаз је практично нестао. npm 7+ укључује workspaces, npm ci (аналог yarn install --frozen-lockfile) и паралелну инсталацију. Међутим, yarn задржава предности у специфичним сценаријима: Plug'n'Play, Zero-Installs и зрео систем constraints.

Карактеристикаnpmyarn
Година настанка20102016
Lock-фајлpackage-lock.json (JSON)yarn.lock (YAML)
ИнсталацијаСеквенцијална (npm 5+)Паралелна
Plug'n'PlayНеДа (yarn 2+)
WorkspacesДа (npm 7+)Да
Zero-InstallsНеДа (yarn 3+)
Кешnode_modules са flatteningГлобални ~/.cache/yarn
Језик имплементацијеJavaScriptTypeScript (yarn 2+)

Када изабрати yarn: пројекти на Expo SDK 50+, велики монорепозиторијуми (100+ пакета), тимови који цијене Zero-Installs за брзо подешавање окружења и legacy пројекти који већ користе yarn. Када изабрати npm: стандардни пројекти create-react-app, Next.js, Vite, тимови без специфичних захтјева према менаџеру пакета.

yarn 4 (2024) представио је побољшане перформансе, native ESM подршку и оптимизацију за велике монорепозиторијуме. npm 10+ наставља да се развија са фокусом на безбједност и компатибилност. Избор између npm и yarn данас је питање тимских преференција и конкретних захтјева пројекта, а не техничке надмоћи једног алата.

Често постављана питања

Која је главна разлика између yarn-а и npm-а?

yarn је првобитно надмашио npm у брзини захваљујући паралелној инсталацији пакета и агресивном кеширању. yarn.lock се аутоматски генерише при свакој инсталацији, док се package-lock.json појавио у npm 5. yarn нуди Plug'n'Play — алтернативу node_modules са нултим временом инсталације. Са npm 7+ разлика у брзини и функционалности за основне сценарије је минимална.

Како функционишу yarn workspaces у монорепозиторијумима?

yarn workspaces — механизам управљања са више пакета у једном репозиторијуму. Коријенски package.json садржи поље "workspaces": ["packages/*"]. yarn install инсталира заједничке зависности на горњем нивоу у јединствени node_modules, креира симлинкове између локалних пакета и избјегава дуплирање. Команде се покрећу за све workspace-ове путем yarn workspaces run <script>.

Шта је yarn Plug'n'Play и чему служи?

Plug'n'Play (PnP) — алтернатива традиционалном node_modules фолдеру, представљена у yarn 2. Умјесто копирања фајлова, yarn креира мапу зависности у .pnp.cjs и чува пакете у ZIP архивама у глобалном кешу. Предности PnP-а: инсталација за неколико секунди, вријеме покретања Node.js-а се смањује за 30-50%, одсуство node_modules и повезаних проблема са путањама.

Како мигрирати пројекат са npm-а на yarn?

Инсталирајте yarn глобално: npm install -g yarn. У коријену пројекта извршите yarn import — yarn ће прочитати package-lock.json и креирати еквивалентни yarn.lock. Обришите node_modules и package-lock.json, извршите yarn install за провјеру. Ажурирајте CI/CD конфигурацију, замијенивши npm са yarn-ом. yarn је потпуно компатибилан са package.json.

Како поправити грешке блокирања верзија у yarn-у?

Грешка "Integrity check failed" настаје при неусаглашености yarn.lock-а и node_modules-а. Рјешење: обришите node_modules, yarn.lock и очистите кеш (yarn cache clean), затим поново извршите yarn install. За конфликте верзија користите yarn upgrade-interactive за избор конкретних ажурирања. yarn dedupe ће уклонити дуплиране пакете.

Резиме

  • yarn — алтернативни менаџер пакета Node.js-а, креиран од стране Facebook-а 2016. године
  • yarn.lock — фајл за фиксирање тачних верзија свих зависности у YAML формату
  • yarn install — паралелна инсталација пакета коришћењем глобалног офлајн кеша
  • Plug'n'Play — иновативни механизам yarn 2+ без node_modules фолдера
  • yarn workspaces — управљање монорепозиторијумима са јединственим node_modules
  • yarn у React Native — стандардни менаџер пакета за Expo и React Native пројекте
  • Zero-Installs — комитовање кеша у репозиторијум за тренутну инсталацију без преузимања пакета

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође