Kratak odgovor
Greška npm ERR! sukob zavisnosti javlja se kada dva ili više paketa zahtevaju različite verzije istog zavisnog paketa. Rešenje je da pregledate stablo zavisnosti, ažurirate ili zaključate verzije, ili privremeno koristite opciju --legacy-peer-deps. Ne preporučuje se ignorisanje upozorenja jer može dovesti do nestabilnog rada aplikacije.
Kako se problem prepoznaje
- npm install prijavljuje ERESOLVE grešku
- Poruka sadrži 'unable to resolve dependency tree'
- Instalacija paketa ne uspeva iako je ranije radila
- Aplikacija se ruši zbog nekompatibilnih verzija paketa
- npm upozorava na peer dependency konflikt
Najčešći uzroci
Nekompatibilne peer zavisnosti
Dva paketa zahtevaju različite verzije istog peer dependency paketa, pa npm ne može da pronađe zajedničku verziju.
Zastareli paketi u projektu
Neki paketi u package.json su zastareli i zahtevaju starije verzije zavisnosti koje više nisu kompatibilne sa novijim paketima.
Ručno menjanje package-lock.json
Ako je package-lock.json ručno menjan ili je izostao, npm ne može pravilno da reši stablo zavisnosti.
Korišćenje npm verzije 7+
Novije npm verzije strože proveravaju peer zavisnosti, pa se greške koje su ranije bile skrivene sada prikazuju.
Rešenje korak po korak
- 1
Pročitajte tačnu poruku greške
Pokrenite
npm installi pažljivo pročitajte poruku. npm obično navodi koji paket i koje verzije su u sukobu. Na osnovu toga znate koje pakete treba ažurirati ili prilagoditi. - 2
Pregledajte stablo zavisnosti
Pokrenite
npm ls <ime-paketa>da vidite koje verzije su instalirane i ko ih zahteva. Za detaljniji prikaz koristitenpm ls --all. To vam pomaže da identifikujete izvor konflikta. - 3
Ažurirajte problematične pakete
Ako je uzrok zastarela verzija, pokušajte sa
npm update <ime-paketa>ili ručno izmenite verziju u package.json na noviju. Zatim pokrenitenpm installda proverite da li je sukob rešen. - 4
Obrišite node_modules i package-lock.json
Ponekad su preostali fajlovi izvor problema. Pre brisanja napravite rezervnu kopiju fajla
package-lock.jsonili proverite da je stanje commit-ovano u git. Zatim obrišite foldernode_modulesi fajlpackage-lock.json, pa ponovo pokrenitenpm install. Time se gradi sveže stablo zavisnosti. - 5
Koristite --legacy-peer-deps kao privremeno rešenje
Ako ne možete odmah da ažurirate pakete, pokrenite
npm install --legacy-peer-deps. Ova opcija ignoriše peer dependency konflikte i instalira pakete kao u starijim npm verzijama. Imajte u vidu da to može dovesti do nestabilnosti. - 6
Koristite --force sa oprezom
Opcija
npm install --forceprisiljava instalaciju i može rešiti tvrdokorne slučajeve, ali može pokvariti zavisnosti. Koristite je samo ako prethodni koraci nisu uspeli i ako razumete rizik. - 7
Proverite kompatibilnost verzija Node.js
Neke greške su posledica nekompatibilne verzije Node.js sa paketima. Proverite da li vaša verzija Node.js odgovara zahtevima paketa. Ako nije, promenite verziju pomoću alata za upravljanje verzijama.
- 8
Koristite npm-check-updates za ažuriranje
Instalirajte alat
npm-check-updatesglobalno i pokrenitencu -uda automatski ažurirate sve verzije u package.json na najnovije. Pre toga commit-ujte promene i proverite kompatibilnost, jerncu -umože da pređe na nove major verzije. Zatim pokrenitenpm install. Ovo je korisno za projekte sa mnogo zastarelih paketa.
Ako ništa ne pomogne
Ako su svi koraci isprobani i greška ostaje, proverite da li je problem u samom npm registru ili u mreži. Ponekad je dovoljno proveriti npm keš komandom npm cache verify, a ako sumnjate na oštećenje, tek onda ga očistiti sa npm cache clean --force i pokušati ponovo. Takođe, razmotrite korišćenje alternativnog package manager-a kao što je Yarn, koji ima drugačiji pristup rešavanju zavisnosti. Ako ni to ne uspe, konsultujte dokumentaciju paketa ili zajednicu. U timskim projektima, obavezno obavestite kolege o promenama u package.json i package-lock.json kako bi svi imali usklađeno okruženje.
Kako da sprečite da se ponovi
- Redovno ažurirajte pakete i proveravajte zastarelost sa `npm outdated`.
- Koristite package-lock.json i commit-ujte ga u git.
- Izbegavajte ručno menjanje package-lock.json.
- Testirajte instalaciju u čistom okruženju pre nego što je podelite sa timom.
Kada je bolje pozvati stručnjaka
Ako se sukob zavisnosti ponavlja i utiče na produktivnost tima, ili ako niste sigurni koje verzije paketa su kompatibilne, obratite se IT podršci. Oni mogu pomoći u analizi zavisnosti i uspostavljanju stabilnog razvojnog okruženja.
Razvoj softvera i proizvoda · Aplikacije po meri, SaaS i MVP za 4 do 8 nedeljaČesta pitanja
Šta znači npm ERR! sukob zavisnosti?
To je greška koja se javlja kada npm ne može da pronađe verziju paketa koja zadovoljava sve zahteve. Najčešće se javlja zbog peer dependency konflikta između dva ili više paketa.
Da li je --legacy-peer-deps sigurno rešenje?
Ova opcija privremeno rešava problem ignorisanjem peer dependency konflikata. Međutim, može dovesti do toga da paketi ne rade ispravno ako su zaista nekompatibilni. Koristite je samo kao privremeno rešenje.
Kako da sprečim sukob zavisnosti u budućnosti?
Redovno ažurirajte pakete, koristite package-lock.json i izbegavajte ručno menjanje. Takođe, pratite upozorenja npm-a i na vreme reagujte na zastarele zavisnosti.