yarn: essens, alternativ pakethanterare för React Native

Författare: IT Sectr Publicerad: 2026-02-13 Lästid: 10 min

yarn — en alternativ pakethanterare för Node.js, skapad av Facebook tillsammans med Exponent, Google och Tilde 2016. yarn löste hastighets- och säkerhetsproblemen med npm 2-4: parallell installation, strikt låsfil och offline-cache. Idag behåller yarn sin popularitet inom React Native, Expo och monorepositories. Mer på yarn Documentation.

Huvudpunkter

  • yarn — pakethanterare för Node.js, skapad av Facebook 2016 för att lösa npm-problem
  • yarn.lock — fil som låser exakta versioner av alla beroenden, skapas automatiskt
  • yarn install — parallell installation av paket med global cache utan dubbelarbete
  • yarn workspaces — mekanism för att hantera monorepositories med delad node_modules-mapp
  • Plug'n'Play — alternativ till node_modules med lagring av paket i ZIP-arkiv i global cache

Vad är yarn — pakethanterare?

yarn (Yet Another Resource Negotiator) släpptes i oktober 2016 som Facebooks svar på npm 2-4-problemen: långsam installation, avsaknad av låsfil och osäkra paket. yarn erbjöd parallell nedladdning av paket, deterministisk yarn.lock och integritetsverifiering via kontrollsummor. 2020 övergick yarn till version 2 (Berry) med Plug'n'Play och TypeScript-first-ansats.

Arkitekturen för yarn skiljer sig från npm: yarn laddar ner paket parallellt (npm upp till version 5 — sekventiellt), cachar varje paket i ~/.cache/yarn utan dubbelarbete mellan projekt och verifierar integritet via checksum. yarn genererar alltid yarn.lock vid varje installation, medan package-lock.json i npm dök upp först i version 5.

Från och med yarn 2 (Berry, 2020) har yarn helt skrivits om i TypeScript och stöder Plug'n'Play, workspaces, constraints för monorepositories och installationsprotokoll från olika källor (npm, git, tarball). yarn 3+ (2022) lade till Zero-Installs — lagring av cache i repository för omedelbar installation utan nätverk.

Hur yarn hanterar installation av beroenden

yarn install — huvudkommandot som läser package.json och yarn.lock och installerar beroenden. yarn laddar ner paket parallellt, vilket snabbar upp installationen 2-3 gånger jämfört med npm 4 och tidigare versioner. yarn använder offline-cache: om ett paket redan har laddats ner i ett annat projekt kopieras det från cachen istället för att laddas ner igen.

bash
# Huvudkommandon för yarn
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# Interaktiv uppdatering
$ yarn upgrade-interactive
# Ta bort dubbla paket
$ yarn dedupe

yarn add — kommando för att installera ett nytt paket. yarn add <package> lägger till i dependencies, yarn add --dev — i devDependencies. yarn uppdaterar automatiskt yarn.lock. yarn upgrade uppdaterar paket till de senaste versionerna inom semantiskt intervall. yarn upgrade-interactive — interaktivt läge för att välja specifika paket att uppdatera.

yarn cache — global cache i ~/.cache/yarn/v6. Varje paket lagras en gång i ett ZIP-arkiv med kontrollsumma. yarn cache rensas automatiskt, men yarn cache clean kan utföras manuellt. yarn cache dir visar sökvägen till cachen. yarn cache list — lista över cachade paket.

yarn.lock: syfte och struktur

yarn.lock — fil som låser exakta versioner av alla beroenden och deras transitiva paket. Till skillnad från package-lock.json (JSON) använder yarn.lock YAML-format med platt struktur. yarn.lock genereras alltid automatiskt vid yarn install eller yarn add — detta garanterar att alla utvecklare och CI-servrar får identisk uppsättning paket.

yaml
# Exempel på yarn.lock-struktur
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..."

Fält i yarn.lock: version — exakt version av paketet, resolution — källa och version, dependencies — dess beroenden, checksum — kontrollsumma för verifiering. yarn.lock committas till repository och är den enda sanna källan för beroenden. Om yarn.lock och package.json inte överensstämmer utfärdar yarn en varning.

Yarn constraints — regelsystem för monorepositories som kontrollerar och tvingar fram beroendeversioner i yarn.lock. Begränsningar beskrivs i filen yarn.constraints.js på Yarn Constraint Language. Constraints gör det möjligt att garantera att alla paket i ett monorepository använder samma version av React eller TypeScript.

yarn i React Native-ekosystemet

React Native är traditionellt nära kopplat till yarn. Expo CLI, React Native CLI och Create React Native App använde från början yarn. I React Native-projekt låser yarn.lock versioner av inbyggda moduler, vilket är avgörande för stabil kompilering via CocoaPods (iOS) och Gradle (Android). yarn workspaces är populära i React Native-monorepositories med delad kod.

yarn workspaces i React Native-monorepositories: rot-package.json innehåller "workspaces": ["packages/*", "mobile"]. yarn install skapar en enda node_modules-mapp på rotnivå. Paket refererar till varandra via symlänkar. npx pod-install körs efter ändring av inbyggda beroenden för att uppdatera 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+ rekommenderar officiellt yarn för nya projekt skapade via npx create-expo-app. yarn säkerställer kompatibilitet med Expo-moduler och genererar automatiskt korrekt yarn.lock. Zero-Installs i yarn 3+ gör det möjligt att committa cache till repository — utvecklare får en färdig miljö utan att installera beroenden efter git clone.

yarn och npm: jämförande analys

npm och yarn löser samma uppgift — hantering av Node.js-paket. Med lanseringen av npm 5-7 har den funktionella klyftan praktiskt taget försvunnit. npm 7+ inkluderar workspaces, npm ci (motsvarighet till yarn install --frozen-lockfile) och parallell installation. yarn behåller dock fördelar i specifika scenarier: Plug'n'Play, Zero-Installs och moget constraints-system.

Egenskapnpmyarn
Skapelseår20102016
Låsfilpackage-lock.json (JSON)yarn.lock (YAML)
InstallationSekventiell (npm 5+)Parallell
Plug'n'PlayNejJa (yarn 2+)
WorkspacesJa (npm 7+)Ja
Zero-InstallsNejJa (yarn 3+)
Cachenode_modules med flatteningGlobal ~/.cache/yarn
ImplementeringsspråkJavaScriptTypeScript (yarn 2+)

När välja yarn: projekt på Expo SDK 50+, stora monorepositories (100+ paket), team som värdesätter Zero-Installs för snabb miljökonfiguration och äldre projekt som redan använder yarn. När välja npm: standardprojekt create-react-app, Next.js, Vite, team utan specifika krav på pakethanteraren.

yarn 4 (2024) introducerade förbättrad prestanda, inbyggt ESM-stöd och optimering för stora monorepositories. npm 10+ fortsätter att utvecklas med fokus på säkerhet och kompatibilitet. Valet mellan npm och yarn är idag en fråga om teamets preferenser och specifika projektkrav, inte teknisk överlägsenhet för ett verktyg.

Vanliga frågor

Vad är den största skillnaden mellan yarn och npm?

yarn överträffade initialt npm i hastighet tack vare parallell installation av paket och aggressiv caching. yarn.lock genereras automatiskt vid varje installation, medan package-lock.json dök upp i npm 5. yarn erbjuder Plug'n'Play — ett alternativ till node_modules med noll installationstid. Från npm 7+ är skillnaden i hastighet och funktionalitet för grundläggande scenarier minimal.

Hur fungerar yarn workspaces i monorepositories?

yarn workspaces — mekanism för att hantera flera paket i ett repository. Rot-package.json innehåller fältet "workspaces": ["packages/*"]. yarn install installerar gemensamma beroenden på den övre nivån i en enda node_modules, skapar symlänkar mellan lokala paket och undviker dubbelarbete. Kommandon körs för alla workspaces via yarn workspaces run <script>.

Vad är yarn Plug'n'Play och vad används det till?

Plug'n'Play (PnP) — ett alternativ till den traditionella node_modules-mappen, introducerad i yarn 2. Istället för att kopiera filer skapar yarn en beroendekarta i .pnp.cjs och lagrar paket i ZIP-arkiv i den globala cachen. Fördelar med PnP: installation på sekunder, Node.js-starttid minskar med 30-50%, frånvaro av node_modules och relaterade problemsökvägar.

Hur migrerar jag ett projekt från npm till yarn?

Installera yarn globalt: npm install -g yarn. I projektroten kör yarn import — yarn läser package-lock.json och skapar en motsvarande yarn.lock. Ta bort node_modules och package-lock.json, kör yarn install för verifiering. Uppdatera CI/CD-konfigurationen och ersätt npm med yarn. yarn är fullt kompatibelt med package.json.

Hur åtgärdar jag versionslåsningsfel i yarn?

Felet "Integrity check failed" uppstår när yarn.lock och node_modules inte stämmer överens. Lösning: ta bort node_modules, yarn.lock och rensa cachen (yarn cache clean), kör sedan yarn install igen. För versionskonflikter, använd yarn upgrade-interactive för att välja specifika uppdateringar. yarn dedupe tar bort dubbletter av paket.

Sammanfattning

  • yarn — alternativ pakethanterare för Node.js, skapad av Facebook 2016
  • yarn.lock — fil som låser exakta versioner av alla beroenden i YAML-format
  • yarn install — parallell installation av paket med global offline-cache
  • Plug'n'Play — innovativ mekanism i yarn 2+ utan node_modules-mapp
  • yarn workspaces — hantering av monorepositories med en enda node_modules
  • yarn i React Native — standardpakethanterare för Expo och React Native-projekt
  • Zero-Installs — committa cache till repository för omedelbar installation utan nedladdning av paket

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också