Lagi asyik ngoding, jalanin npm install, eh malah muncul tembok merah:
npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree
Tenang, kamu nggak sendirian. Error ini salah satu yang paling sering bikin developer — terutama yang baru upgrade npm — garuk-garuk kepala. Kabar baiknya: solusinya sudah mapan dan hampir selalu berhasil. Artikel ini ngebahas 5 solusi terbukti dari yang paling gampang sampai yang paling tuntas, plus cara baca error log-nya biar kamu paham akar masalahnya.
Kenapa Error ERESOLVE Bisa Muncul?
Singkatnya: dua package di proyekmu rebutan versi yang beda dari dependency yang sama. Contoh klasik: proyekmu pakai react@18, tapi salah satu plugin masih minta react@^17 sebagai peer dependency. npm nggak bisa nurutin dua-duanya, jadi dia menyerah.
Kenapa dulu nggak pernah kena? Karena mulai npm versi 7, pengecekan peer dependency diperketat — yang dulu cuma warning sekarang jadi error fatal. Makanya banyak proyek lama yang tiba-tiba "rusak" setelah npm-nya di-update, padahal kodenya nggak diubah sama sekali.
Tiga pemicu paling umum:
- Upgrade package utama (misal React 17 → 18) sementara plugin-pluginnya belum merilis versi yang kompatibel.
- Package yang ketinggalan zaman — dependensinya masih mendeklarasikan peer versi lama.
package-lock.jsonyang basi — hasil resolve lama bentrok dengan yang mau di-install sekarang.
Cara Membaca Error Log ERESOLVE
Sebelum asal coba solusi, baca dulu log-nya — npm sebenarnya sudah nunjukin siapa yang berantem. Contoh potongan log:
npm ERR! Found: [email protected] npm ERR! Could not resolve dependency: npm ERR! peer react@"^17.0.0" from [email protected]
Cara bacanya:
- "Found: [email protected]" → versi yang sekarang terpasang di proyekmu.
- "peer react@^17.0.0 from [email protected]" → si
some-pluginmenuntut React versi 17, padahal yang ada versi 18. Inilah biang keroknya.
Catat nama package yang "menuntut" itu — dia yang akan kita bereskan di solusi-solusi berikut.
Solusi 1: Pakai --legacy-peer-deps (Paling Cepat)
npm install --legacy-peer-deps
Flag ini mengembalikan perilaku npm 6: konflik peer dependency diturunkan jadi warning, install tetap jalan. Ini solusi tercepat dan paling sering dipakai.
Kapan pakai: kamu butuh jalan cepat — misal lagi dikejar deadline atau sekadar mau coba-coba. Catatan jujur: ini jalan pintas, bukan perbaikan. Kalau package yang konflik ternyata manggil API yang cuma ada di versi baru, error-nya pindah ke runtime (saat aplikasi jalan) yang lebih susah di-debug. Anggap ini perban sementara.
Supaya nggak perlu ngetik flag-nya tiap kali, bisa diset permanen:
npm config set legacy-peer-deps true
Solusi 2: Update Package yang Ketinggalan (Paling Benar)
Dari log tadi, [email protected] yang minta React 17. Solusi paling bersih: naikkan versinya ke rilis yang sudah mendukung React 18.
npm install some-plugin@latest
Cek dulu changelog atau halaman npm package-nya untuk memastikan versi barunya memang mendukung versi framework yang kamu pakai. Kalau sudah kompatibel, install ulang tanpa flag apa pun — error ERESOLVE hilang secara permanen karena konfliknya benar-benar selesai di akarnya.
Ini solusi yang paling direkomendasikan untuk proyek jangka panjang.
Solusi 3: Selaraskan Versi Secara Manual
Kadang masalahnya sebaliknya: kamu yang terlalu maju. Misalnya proyek masih pakai banyak plugin era React 17, tapi kamu sudah upgrade ke React 18. Kalau belum siap migrasi penuh, turunkan package yang konflik ke versi yang cocok:
npm install nama-package@versi-yang-cocok
Lalu verifikasi pohon dependensinya sudah rapi:
npm ls react
Perintah ini nunjukin apakah react sudah settle di satu versi di seluruh tree. Kalau masih muncul banyak versi, berarti masih ada yang belum selaras.
Solusi 4: Paksa Satu Versi dengan overrides
Kalau konfliknya membandel dan tersebar di banyak package, kamu bisa memaksa seluruh tree memakai satu versi lewat field overrides di package.json:
{
"dependencies": {
"react": "^18.2.0"
},
"overrides": {
"react": "^18.2.0"
}
}
Dengan ini, semua package — termasuk yang minta versi lain — dipaksa memakai React 18.2.0. Hati-hati: ini palu godam. Pakai hanya kalau kamu yakin versi yang dipaksa kompatibel dengan semua package yang memakainya, dan uji aplikasinya setelah itu.
Solusi 5: Bersihkan dan Generate Ulang Lockfile
Kalau package-lock.json-nya yang basi dan bikin konflik semu:
rm -rf node_modules package-lock.json npm install
Ini me-reset total pohon dependency dan me-resolve ulang dari nol. Peringatan: cara ini bisa menarik update minor/patch di semua dependency — di proyek besar, itu berarti banyak perubahan tak terduga. Commit dulu kerjaanmu ke git sebelum mencoba, biar gampang rollback kalau ada yang aneh.
Yang TIDAK Disarankan: --force
npm sendiri menyarankan --force di pesan error-nya, tapi jangan. Flag ini menginstall pohon dependency yang diketahui konflik — kamu cuma menukar error saat install dengan error saat aplikasi jalan. Hampir selalu lebih buruk.
Cara Mencegah ERESOLVE di Kemudian Hari
- Rutin cek
npm outdated— package yang ketinggalan jauh adalah calon biang ERESOLVE berikutnya. - Upgrade framework dan plugin-nya barengan. Jangan naikkan React sendirian tanpa mengecek kompatibilitas plugin.
- Pin versi mayor yang kritis. Package seperti
reactdanreact-domwajib satu versi mayor. - Baca peer requirement sebelum install package baru. Satu menit cek dokumentasi menghemat satu jam debugging.
FAQ
Apa bedanya --legacy-peer-deps dan --force?
--legacy-peer-deps mengabaikan konflik peer dependency (kembali ke perilaku npm 6: cuma warning). --force memaksa install meski npm tahu hasilnya konflik — jauh lebih berisiko.
Apakah aman pakai --legacy-peer-deps untuk production?
Bisa, tapi bukan ideal. Banyak proyek production memakainya tanpa masalah, namun risiko runtime error tetap ada kalau versinya memang tidak kompatibel. Untuk jangka panjang, selaraskan versinya.
Error muncul setelah upgrade npm, padahal kemarin baik-baik saja. Kenapa?
Karena npm 7+ memperketat validasi peer dependency. Proyekmu sebenarnya sudah "konflik" dari dulu — cuma dulu npm 6 menoleransinya sebagai warning.
npm ls menunjukkan banyak versi package yang sama. Bahaya?
Belum tentu — npm memang bisa menginstall beberapa versi sekaligus (nested). Yang bahaya adalah kalau package yang harus tunggal (seperti react/react-dom) terpecah jadi dua versi.
Kesimpulan
ERESOLVE itu npm yang sedang jujur: dia bilang ada konflik versi yang nggak bisa didamaikan otomatis. Urutan mainnya: coba update package yang ketinggalan dulu (solusi permanen) → kalau kepepet, --legacy-peer-deps (jalan pintas) → kalau konfliknya sistemik, overrides atau selaraskan manual. Hindari --force, dan biasakan baca log-nya sebelum panik — npm sudah nunjukin siapa tersangkanya.
Komentar
Posting Komentar