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 (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.
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.
# 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 — 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.
# 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.
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.
{
"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.
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.
| Karakteristik | npm | yarn |
|---|---|---|
| Tahun pembuatan | 2010 | 2016 |
| File kunci | package-lock.json (JSON) | yarn.lock (YAML) |
| Instalasi | Sekuensial (npm 5+) | Paralel |
| Plug'n'Play | Tidak | Ya (yarn 2+) |
| Workspaces | Ya (npm 7+) | Ya |
| Zero-Installs | Tidak | Ya (yarn 3+) |
| Cache | node_modules dengan flattening | Global ~/.cache/yarn |
| Bahasa implementasi | JavaScript | TypeScript (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
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.
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>.
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.
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.
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
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.
Baca juga