yarn: esensya, alternatibong tagapamahala ng package para sa React Native

May-akda: IT Sectr Nai-publish: 2026-02-13 Oras ng pagbabasa: 10 min

yarn — isang alternatibong tagapamahala ng package para sa Node.js, na nilikha ng Facebook kasama ang Exponent, Google at Tilde noong 2016. Nalutas ng yarn ang mga problema sa bilis at seguridad ng npm 2-4: parallel na pag-install, mahigpit na lock-file at offline cache. Ngayon, pinapanatili ng yarn ang kasikatan nito sa React Native, Expo at monorepository. Higit pa — sa yarn Documentation.

Mga Pangunahin

  • yarn — tagapamahala ng package para sa Node.js, na nilikha ng Facebook noong 2016 upang malutas ang mga problema ng npm
  • yarn.lock — file na nag-aayos ng eksaktong bersyon ng lahat ng dependencies, awtomatikong nilikha
  • yarn install — parallel na pag-install ng mga package gamit ang global cache nang walang pagdodoble
  • yarn workspaces — mekanismo para sa pamamahala ng mga monorepository na may pinagsamang folder ng node_modules
  • Plug'n'Play — alternatibo sa node_modules na may imbakan ng mga package sa ZIP archive sa global cache

Ano ang yarn — tagapamahala ng package?

yarn (Yet Another Resource Negotiator) ay inilabas noong Oktubre 2016 bilang tugon ng Facebook sa mga problema ng npm 2-4: mabagal na pag-install, kawalan ng lock-file at hindi ligtas na mga package. Nag-alok ang yarn ng parallel na pag-download ng mga package, deterministikong yarn.lock at pag-verify ng integridad sa pamamagitan ng checksum. Noong 2020, lumipat ang yarn sa bersyon 2 (Berry) na may Plug'n'Play at TypeScript-first na diskarte.

Arkitektura ng yarn ay naiiba sa npm: nagda-download ang yarn ng mga package nang parallel (npm hanggang bersyon 5 — sunud-sunod), nagke-cache ng bawat package sa ~/.cache/yarn nang walang pagdodoble sa pagitan ng mga proyekto at nag-verify ng integridad sa pamamagitan ng checksum. palaging gumagawa ang yarn ng yarn.lock sa bawat pag-install, samantalang ang package-lock.json sa npm ay lumitaw lamang sa bersyon 5.

Simula sa yarn 2 (Berry, 2020), ganap na naisulat muli ang yarn sa TypeScript at sumusuporta sa Plug'n'Play, workspaces, constraints para sa mga monorepository at mga protocol ng pag-install mula sa iba't ibang mapagkukunan (npm, git, tarball). Nagdagdag ang yarn 3+ (2022) ng Zero-Installs — pag-iimbak ng cache sa repository para sa agarang pag-install nang walang network.

Paano pinamamahalaan ng yarn ang pag-install ng dependencies

yarn install — ang pangunahing utos na nagbabasa ng package.json at yarn.lock at nag-i-install ng dependencies. Nagda-download ang yarn ng mga package nang parallel, na nagpapabilis ng pag-install ng 2-3 beses kumpara sa npm 4 at mas naunang bersyon. Gumagamit ang yarn ng offline cache: kung ang isang package ay na-download na sa ibang proyekto, ito ay kinokopya mula sa cache, hindi dina-download muli.

bash
# Mga pangunahing utos ng yarn
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# Interactive na pag-update
$ yarn upgrade-interactive
# Pag-alis ng mga duplicate na package
$ yarn dedupe

yarn add — utos para sa pag-install ng bagong package. yarn add <package> ay nagdaragdag sa dependencies, yarn add --dev — sa devDependencies. Awtomatikong ina-update ng yarn ang yarn.lock. yarn upgrade ay nag-a-update ng mga package sa pinakabagong bersyon sa loob ng semantic range. yarn upgrade-interactive — interactive na mode para sa pagpili ng mga partikular na package na ia-update.

yarn cache — global cache sa ~/.cache/yarn/v6. Ang bawat package ay iniimbak nang isang beses sa ZIP archive na may checksum. Awtomatikong nalilinis ang yarn cache, ngunit maaaring manu-manong isagawa ang yarn cache clean. Ipinapakita ng yarn cache dir ang landas patungo sa cache. yarn cache list — listahan ng mga naka-cache na package.

yarn.lock: layunin at istraktura ng file

yarn.lock — file na nag-aayos ng eksaktong bersyon ng lahat ng dependencies at kanilang mga transitibong package. Hindi tulad ng package-lock.json (JSON), ang yarn.lock ay gumagamit ng YAML na format na may patag na istraktura. Ang yarn.lock ay palaging awtomatikong nabubuo sa yarn install o yarn add — ginagarantiyahan nito na ang lahat ng developer at CI server ay makakatanggap ng magkaparehong set ng mga package.

yaml
# Halimbawa ng istraktura ng 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..."

Mga field ng yarn.lock: version — eksaktong bersyon ng package, resolution — pinagmulan at bersyon, dependencies — mga dependencies nito, checksum — checksum para sa pag-verify. Ang yarn.lock ay naka-commit sa repository at ito ang tanging pinagmumulan ng katotohanan para sa mga dependencies. Kung hindi tugma ang yarn.lock at package.json, naglalabas ang yarn ng babala.

Yarn constraints — sistema ng mga patakaran para sa mga monorepository na sumusuri at nagpapatupad ng mga bersyon ng dependencies sa yarn.lock. Ang mga limitasyon ay inilalarawan sa file na yarn.constraints.js sa Yarn Constraint Language. Pinapayagan ng Constraints na garantiyahan na ang lahat ng package sa monorepository ay gumagamit ng parehong bersyon ng React o TypeScript.

yarn sa ecosystem ng React Native

React Native ay tradisyonal na malapit na nauugnay sa yarn. Ang Expo CLI, React Native CLI at Create React Native App ay orihinal na gumamit ng yarn. Sa mga proyekto ng React Native, inaayos ng yarn.lock ang mga bersyon ng native modules, na kritikal para sa matatag na compilation sa pamamagitan ng CocoaPods (iOS) at Gradle (Android). Ang yarn workspaces ay popular sa React Native monorepository na may shared code.

yarn workspaces sa React Native monorepository: ang root package.json ay naglalaman ng "workspaces": ["packages/*", "mobile"]. Ang yarn install ay lumilikha ng iisang folder ng node_modules sa root level. Ang mga package ay tumutukoy sa isa't isa sa pamamagitan ng symlink. Ang npx pod-install ay isinasagawa pagkatapos baguhin ang native dependencies upang i-update ang 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+ ay opisyal na nagrerekomenda ng yarn para sa mga bagong proyekto na nilikha sa pamamagitan ng npx create-expo-app. Tinitiyak ng yarn ang compatibility sa mga Expo module at awtomatikong bumubuo ng tamang yarn.lock. Ang Zero-Installs sa yarn 3+ ay nagpapahintulot sa pag-commit ng cache sa repository — ang mga developer ay makakakuha ng handa na kapaligiran nang hindi nag-i-install ng dependencies pagkatapos ng git clone.

yarn at npm: paghahambing na pagsusuri

npm at yarn ay nilulutas ang parehong gawain — pamamahala ng mga package ng Node.js. Sa paglabas ng npm 5-7, ang functional gap ay halos nawala. Ang npm 7+ ay may kasamang workspaces, npm ci (katumbas ng yarn install --frozen-lockfile) at parallel install. Gayunpaman, pinapanatili ng yarn ang mga kalamangan sa mga partikular na sitwasyon: Plug'n'Play, Zero-Installs at mature na sistema ng constraints.

Katangiannpmyarn
Taon ng paglikha20102016
Lock-filepackage-lock.json (JSON)yarn.lock (YAML)
Pag-installSunud-sunod (npm 5+)Parallel
Plug'n'PlayHindiOo (yarn 2+)
WorkspacesOo (npm 7+)Oo
Zero-InstallsHindiOo (yarn 3+)
Cachenode_modules na may flatteningGlobal ~/.cache/yarn
Wika ng implementasyonJavaScriptTypeScript (yarn 2+)

Kailan pumili ng yarn: mga proyekto sa Expo SDK 50+, malalaking monorepository (100+ package), mga team na pinahahalagahan ang Zero-Installs para sa mabilis na pag-setup ng kapaligiran at legacy na mga proyekto na gumagamit na ng yarn. Kailan pumili ng npm: mga karaniwang proyekto ng create-react-app, Next.js, Vite, mga team na walang partikular na kinakailangan para sa tagapamahala ng package.

yarn 4 (2024) ay nagpakilala ng pinahusay na pagganap, native na ESM support at optimization para sa malalaking monorepository. Ang npm 10+ ay patuloy na umuunlad na may pagtuon sa seguridad at compatibility. Ang pagpili sa pagitan ng npm at yarn ngayon ay isang bagay ng mga kagustuhan ng team at partikular na kinakailangan ng proyekto, hindi ng teknikal na kahusayan ng isang tool.

Mga Madalas Itanong

Ano ang pangunahing pagkakaiba ng yarn at npm?

yarn ay una nang nalampasan ang npm sa bilis dahil sa parallel na pag-install ng mga package at agresibong caching. Ang yarn.lock ay awtomatikong nabubuo sa bawat pag-install, samantalang ang package-lock.json ay lumitaw sa npm 5. Nag-aalok ang yarn ng Plug'n'Play — isang alternatibo sa node_modules na may zero na oras ng pag-install. Sa npm 7+, ang pagkakaiba sa bilis at functionality para sa mga pangunahing sitwasyon ay minimal.

Paano gumagana ang yarn workspaces sa mga monorepository?

yarn workspaces — mekanismo para sa pamamahala ng maramihang package sa isang repository. Ang root package.json ay naglalaman ng field na "workspaces": ["packages/*"]. Ang yarn install ay nag-i-install ng mga shared dependencies sa itaas na antas sa iisang node_modules, lumilikha ng mga symlink sa pagitan ng mga lokal na package at iniiwasan ang pagdodoble. Ang mga utos ay isinasagawa para sa lahat ng workspace sa pamamagitan ng yarn workspaces run <script>.

Ano ang yarn Plug'n'Play at para saan ito?

Plug'n'Play (PnP) — isang alternatibo sa tradisyonal na folder ng node_modules, na ipinakilala sa yarn 2. Sa halip na kopyahin ang mga file, lumilikha ang yarn ng mapa ng dependencies sa .pnp.cjs at iniimbak ang mga package sa ZIP archive sa global cache. Mga kalamangan ng PnP: pag-install sa loob ng ilang segundo, oras ng pagsisimula ng Node.js na nababawasan ng 30-50%, kawalan ng node_modules at mga kaugnay na problema sa path.

Paano mag-migrate ng proyekto mula npm patungo sa yarn?

I-install ang yarn globally: npm install -g yarn. Sa root ng proyekto, isagawa ang yarn import — babasahin ng yarn ang package-lock.json at lilikha ng katumbas na yarn.lock. Tanggalin ang node_modules at package-lock.json, isagawa ang yarn install para sa pag-verify. I-update ang CI/CD configuration, palitan ang npm ng yarn. Ang yarn ay ganap na compatible sa package.json.

Paano ayusin ang mga error sa pag-lock ng bersyon sa yarn?

Ang error na "Integrity check failed" ay nangyayari kapag hindi tugma ang yarn.lock at node_modules. Solusyon: tanggalin ang node_modules, yarn.lock at linisin ang cache (yarn cache clean), pagkatapos ay isagawa muli ang yarn install. Para sa mga salungatan sa bersyon, gamitin ang yarn upgrade-interactive upang pumili ng mga partikular na update. yarn dedupe ay mag-aalis ng mga duplicate na package.

Buod

  • yarn — alternatibong tagapamahala ng package ng Node.js, na nilikha ng Facebook noong 2016
  • yarn.lock — file na nag-aayos ng eksaktong bersyon ng lahat ng dependencies sa YAML format
  • yarn install — parallel na pag-install ng mga package gamit ang global offline cache
  • Plug'n'Play — makabagong mekanismo ng yarn 2+ nang walang folder ng node_modules
  • yarn workspaces — pamamahala ng mga monorepository na may iisang node_modules
  • yarn sa React Native — karaniwang tagapamahala ng package para sa Expo at React Native na mga proyekto
  • Zero-Installs — pag-commit ng cache sa repository para sa agarang pag-install nang hindi dina-download ang mga package

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din