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 (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.
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.
# 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 — 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.
# 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.
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.
{
"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.
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.
| Egenskap | npm | yarn |
|---|---|---|
| Skapelseår | 2010 | 2016 |
| Låsfil | package-lock.json (JSON) | yarn.lock (YAML) |
| Installation | Sekventiell (npm 5+) | Parallell |
| Plug'n'Play | Nej | Ja (yarn 2+) |
| Workspaces | Ja (npm 7+) | Ja |
| Zero-Installs | Nej | Ja (yarn 3+) |
| Cache | node_modules med flattening | Global ~/.cache/yarn |
| Implementeringsspråk | JavaScript | TypeScript (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
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.
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>.
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.
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.
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
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.
Läs också