yarn: esensi, manajer paket alternatif untuk React Native

Penulis: IT Sectr Diterbitkan: 2026-02-13 Waktu membaca: 10 mnt

yarn — manajer paket alternatif untuk Node.js, dibuat oleh Facebook bersama dengan Exponent, Google dan Tilde pada tahun 2016. yarn memecahkan masalah kecepatan dan keamanan npm 2-4: instalasi paralel, file kunci yang ketat, dan cache offline. Saat ini yarn tetap populer di React Native, Expo, dan monorepo. Selengkapnya — di yarn Documentation.

Poin Utama

  • yarn — manajer paket untuk Node.js, dibuat oleh Facebook pada tahun 2016 untuk memecahkan masalah npm
  • yarn.lock — file penetapan versi tepat semua dependensi, dibuat secara otomatis
  • yarn install — instalasi paralel paket menggunakan cache global tanpa duplikasi
  • yarn workspaces — mekanisme pengelolaan monorepo dengan folder node_modules bersama
  • Plug'n'Play — alternatif node_modules dengan penyimpanan paket dalam arsip ZIP di cache global

Apa itu yarn — manajer paket?

yarn (Yet Another Resource Negotiator) dirilis pada Oktober 2016 sebagai respons Facebook terhadap masalah npm 2-4: instalasi lambat, tidak adanya file kunci, dan paket tidak aman. yarn menawarkan pengunduhan paralel paket, yarn.lock deterministik, dan verifikasi integritas melalui checksum. Pada tahun 2020 yarn beralih ke versi 2 (Berry) dengan Plug'n'Play dan pendekatan TypeScript-first.

Arsitektur yarn berbeda dari npm: yarn mengunduh paket secara paralel (npm hingga versi 5 — sekuensial), menyimpan cache setiap paket di ~/.cache/yarn tanpa duplikasi antar proyek, dan memverifikasi integritas melalui checksum. yarn selalu menghasilkan yarn.lock pada setiap instalasi, sementara package-lock.json di npm baru muncul di versi 5.

Mulai dari yarn 2 (Berry, 2020), yarn ditulis ulang sepenuhnya dalam TypeScript dan mendukung Plug'n'Play, workspaces, constraints untuk monorepo, dan protokol instalasi dari berbagai sumber (npm, git, tarball). yarn 3+ (2022) menambahkan Zero-Installs — penyimpanan cache di repositori untuk instalasi instan tanpa jaringan.

Bagaimana yarn mengelola instalasi dependensi

yarn install — perintah utama yang membaca package.json dan yarn.lock serta menginstal dependensi. yarn mengunduh paket secara paralel, yang mempercepat instalasi 2-3 kali dibandingkan npm 4 dan versi sebelumnya. yarn menggunakan cache offline: jika paket sudah diunduh di proyek lain, paket disalin dari cache, bukan diunduh lagi.

bash
# Perintah utama yarn
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# Pembaruan interaktif
$ yarn upgrade-interactive
# Menghapus paket duplikat
$ yarn dedupe

yarn add — perintah untuk menginstal paket baru. yarn add <package> menambahkan ke dependencies, yarn add --dev — ke devDependencies. yarn secara otomatis memperbarui yarn.lock. yarn upgrade memperbarui paket ke versi terbaru dalam rentang semantik. yarn upgrade-interactive — mode interaktif untuk memilih paket tertentu yang akan diperbarui.

yarn cache — cache global di ~/.cache/yarn/v6. Setiap paket disimpan satu kali dalam arsip ZIP dengan checksum. yarn cache dibersihkan secara otomatis, tetapi yarn cache clean dapat dijalankan secara manual. yarn cache dir menunjukkan jalur ke cache. yarn cache list — daftar paket yang di-cache.

yarn.lock: tujuan dan struktur file

yarn.lock — file penetapan versi tepat semua dependensi dan paket transitifnya. Berbeda dengan package-lock.json (JSON), yarn.lock menggunakan format YAML dengan struktur datar. yarn.lock selalu dihasilkan secara otomatis saat yarn install atau yarn add — ini menjamin bahwa semua pengembang dan server CI mendapatkan set paket yang identik.

yaml
# Contoh struktur 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..."

Bidang yarn.lock: version — versi tepat paket, resolution — sumber dan versi, dependencies — dependensinya, checksum — checksum untuk verifikasi. yarn.lock di-commit ke repositori dan merupakan satu-satunya sumber kebenaran untuk dependensi. Jika yarn.lock dan package.json tidak cocok, yarn mengeluarkan peringatan.

Yarn constraints — sistem aturan untuk monorepo yang memeriksa dan memaksa versi dependensi di yarn.lock. Batasan dijelaskan dalam file yarn.constraints.js menggunakan Yarn Constraint Language. Constraints memungkinkan memastikan bahwa semua paket dalam monorepo menggunakan versi React atau TypeScript yang sama.

yarn dalam ekosistem React Native

React Native secara tradisional terkait erat dengan yarn. Expo CLI, React Native CLI, dan Create React Native App awalnya menggunakan yarn. Dalam proyek React Native, yarn.lock menetapkan versi modul native, yang sangat penting untuk kompilasi stabil melalui CocoaPods (iOS) dan Gradle (Android). yarn workspaces populer di monorepo React Native dengan kode bersama.

yarn workspaces dalam monorepo React Native: package.json root berisi "workspaces": ["packages/*", "mobile"]. yarn install membuat satu folder node_modules di tingkat root. Paket saling merujuk melalui symlink. npx pod-install dijalankan setelah mengubah dependensi native untuk memperbarui 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+ secara resmi merekomendasikan yarn untuk proyek baru yang dibuat melalui npx create-expo-app. yarn memastikan kompatibilitas dengan modul Expo dan secara otomatis menghasilkan yarn.lock yang benar. Zero-Installs di yarn 3+ memungkinkan commit cache ke repositori — pengembang mendapatkan lingkungan siap pakai tanpa menginstal dependensi setelah git clone.

yarn dan npm: analisis perbandingan

npm dan yarn menyelesaikan tugas yang sama — mengelola paket Node.js. Dengan rilisnya npm 5-7, kesenjangan fungsional hampir hilang. npm 7+ mencakup workspaces, npm ci (setara dengan yarn install --frozen-lockfile) dan instalasi paralel. Namun, yarn tetap unggul dalam skenario tertentu: Plug'n'Play, Zero-Installs, dan sistem constraints yang matang.

Karakteristiknpmyarn
Tahun pembuatan20102016
File kuncipackage-lock.json (JSON)yarn.lock (YAML)
InstalasiSekuensial (npm 5+)Paralel
Plug'n'PlayTidakYa (yarn 2+)
WorkspacesYa (npm 7+)Ya
Zero-InstallsTidakYa (yarn 3+)
Cachenode_modules dengan flatteningGlobal ~/.cache/yarn
Bahasa implementasiJavaScriptTypeScript (yarn 2+)

Kapan memilih yarn: proyek di Expo SDK 50+, monorepo besar (100+ paket), tim yang menghargai Zero-Installs untuk pengaturan lingkungan cepat, dan proyek legacy yang sudah menggunakan yarn. Kapan memilih npm: proyek standar create-react-app, Next.js, Vite, tim tanpa persyaratan khusus terhadap manajer paket.

yarn 4 (2024) menghadirkan peningkatan kinerja, dukungan ESM native, dan optimalisasi untuk monorepo besar. npm 10+ terus berkembang dengan fokus pada keamanan dan kompatibilitas. Pilihan antara npm dan yarn saat ini adalah masalah preferensi tim dan kebutuhan spesifik proyek, bukan keunggulan teknis salah satu alat.

Pertanyaan yang Sering Diajukan

Apa perbedaan utama antara yarn dan npm?

yarn awalnya melampaui npm dalam kecepatan berkat instalasi paralel paket dan caching agresif. yarn.lock dihasilkan secara otomatis pada setiap instalasi, sementara package-lock.json muncul di npm 5. yarn menawarkan Plug'n'Play — alternatif node_modules dengan waktu instalasi nol. Dengan npm 7+, perbedaan kecepatan dan fungsionalitas untuk skenario dasar menjadi minimal.

Bagaimana cara kerja yarn workspaces di monorepo?

yarn workspaces — mekanisme pengelolaan beberapa paket dalam satu repositori. Package.json root berisi bidang "workspaces": ["packages/*"]. yarn install menginstal dependensi bersama di tingkat atas dalam satu node_modules, membuat symlink antar paket lokal, dan menghindari duplikasi. Perintah dijalankan untuk semua workspace melalui yarn workspaces run <script>.

Apa itu yarn Plug'n'Play dan untuk apa?

Plug'n'Play (PnP) — alternatif untuk folder node_modules tradisional, diperkenalkan di yarn 2. Alih-alih menyalin file, yarn membuat peta dependensi di .pnp.cjs dan menyimpan paket dalam arsip ZIP di cache global. Keunggulan PnP: instalasi dalam hitungan detik, waktu startup Node.js berkurang 30-50%, tidak adanya node_modules dan masalah jalur yang terkait.

Bagaimana cara migrasi proyek dari npm ke yarn?

Instal yarn secara global: npm install -g yarn. Di root proyek, jalankan yarn import — yarn akan membaca package-lock.json dan membuat yarn.lock yang setara. Hapus node_modules dan package-lock.json, jalankan yarn install untuk verifikasi. Perbarui konfigurasi CI/CD dengan mengganti npm menjadi yarn. yarn sepenuhnya kompatibel dengan package.json.

Bagaimana cara memperbaiki kesalahan penguncian versi di yarn?

Kesalahan "Integrity check failed" terjadi ketika yarn.lock dan node_modules tidak cocok. Solusi: hapus node_modules, yarn.lock dan bersihkan cache (yarn cache clean), lalu jalankan yarn install lagi. Untuk konflik versi, gunakan yarn upgrade-interactive untuk memilih pembaruan tertentu. yarn dedupe akan menghapus paket duplikat.

Kesimpulan

  • yarn — manajer paket alternatif Node.js, dibuat oleh Facebook pada tahun 2016
  • yarn.lock — file penetapan versi tepat semua dependensi dalam format YAML
  • yarn install — instalasi paralel paket menggunakan cache global offline
  • Plug'n'Play — mekanisme inovatif yarn 2+ tanpa folder node_modules
  • yarn workspaces — pengelolaan monorepo dengan satu node_modules
  • yarn di React Native — manajer paket standar untuk proyek Expo dan React Native
  • Zero-Installs — commit cache ke repositori untuk instalasi instan tanpa mengunduh paket

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga