Stopt npm install met ‘code ERESOLVE’ of ‘unable to resolve dependency tree’? Pakketten eisen andere versies. Zo lees je de melding en los je het op.
ERESOLVE betekent dat npm geen combinatie van pakketversies kan vinden die aan alle eisen voldoet. Meestal gaat het om peerDependencies: een pakket zegt ‘ik werk alleen samen met versie X van dat andere pakket’, bijvoorbeeld een plugin die een bepaalde versie van React, Angular, ESLint of webpack verwacht. Heeft je project een andere versie, dan botsen de eisen.
Sinds npm 7 installeert npm peerDependencies automatisch en controleert het die streng. Een conflict dat oudere npm-versies alleen als waarschuwing toonden, stopt de installatie nu met ERESOLVE. Daarom zie je deze fout vaak bij oudere projecten, na het bijwerken van één hoofdpakket, of als een plugin de nieuwste versie van zijn hoofdpakket nog niet ondersteunt.
De melding zelf vertelt precies wat er botst. Onder Found staat wat er nu is, onder Could not resolve dependency welk pakket welke versie verwacht. Wie die drie regels leest, weet meestal al welke versie moet veranderen.
code ERESOLVE en noemt regels met While resolving, Found en Could not resolve dependency.npm install -g, dan is het npm EACCES.Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Scroll naar het begin van de foutmelding. Je ziet welk pakket welke versie verwacht en welke versie er gevonden is. In dit voorbeeld verwacht oud-pakket React 17, terwijl het project React 18 gebruikt. npm schrijft ook een volledig rapport weg; het pad staat onderaan de melding.
npm error While resolving: mijn-app@1.0.0
npm error Found: react@18.3.1
npm error react@"^18.2.0" from the root project
npm error
npm error Could not resolve dependency:
npm error peer react@"^17.0.0" from oud-pakket@2.1.0Met npm ls en npm explain zie je welke pakketten een afhankelijkheid binnenhalen en in welke versie. Zo weet je of het om een pakket gaat dat je zelf hebt toegevoegd of om iets dat diep in de boom zit.
npm ls react --all
npm explain reactKijk of er een nieuwere versie is van het pakket dat de oude peer-versie eist; vaak ondersteunt die de nieuwe versie al. Met npm view zie je de beschikbare versies en de peerDependencies per versie. Werk dat pakket bij, of kies tijdelijk een versie van het hoofdpakket die beide ondersteunen.
npm view oud-pakket versions
npm view oud-pakket peerDependencies
npm view oud-pakket@latest peerDependencies
npm install oud-pakket@latestEen ander team of de server kan een andere npm-versie gebruiken die anders met peerDependencies omgaat. Leg de verwachte versie vast, bijvoorbeeld in engines in package.json of een .nvmrc, zodat iedereen hetzelfde resultaat krijgt.
node -v
npm -vWordt een pakket niet meer bijgewerkt en blijft het een oude versie eisen, overweeg dan een alternatief dat wel wordt onderhouden. Op de lange duur is dat vaak minder werk dan de botsing steeds opnieuw omzeilen.
Weet je zeker dat het pakket met de nieuwere versie werkt (lees de changelog en test), dan kun je npm met overrides in package.json opdragen een bepaalde versie te gebruiken. $react verwijst naar de versie die je project zelf in dependencies heeft staan. Installeer daarna opnieuw en test de onderdelen die het pakket gebruiken.
{
"dependencies": {
"react": "^18.2.0",
"oud-pakket": "^2.1.0"
},
"overrides": {
"oud-pakket": {
"react": "$react"
}
}
}Met --legacy-peer-deps negeert npm peerDependencies, zoals oudere versies deden. De installatie slaagt dan, maar het conflict is er nog: het pakket kan in de praktijk alsnog fouten geven. --force gaat nog verder en accepteert ook andere conflicten. Gebruik dit om verder te kunnen werken en plan een echte oplossing. Zet je het in .npmrc, dan geldt het voor iedereen en voor de build-server; vermeld dan waarom.
npm install --legacy-peer-deps
# projectbreed (.npmrc in de projectmap)
legacy-peer-deps=trueLet op: Verwijder niet als eerste package-lock.json om de fout weg te krijgen. Dan rekent npm alle versies opnieuw uit en kunnen tientallen pakketten tegelijk veranderen, met nieuwe fouten als gevolg.
Installeert het lokaal wel en op de server of in de CI-pijplijn niet, dan zit het verschil meestal in de omgeving:
--legacy-peer-deps geïnstalleerd, maar de server draait npm ci zonder die optie. Zet de instelling dan in .npmrc of los het conflict echt op.npm ci weigert dan te installeren.Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.
Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.
npm kan geen combinatie van pakketversies vinden die aan alle eisen voldoet, meestal door een conflict in peerDependencies. De melding noemt welk pakket welke versie verwacht.
Het laat de installatie slagen door peerDependencies te negeren, maar lost het conflict niet op. Gebruik het tijdelijk en zoek daarna een passende versie of een override die je hebt getest.
--legacy-peer-deps slaat het installeren en controleren van peerDependencies over. --force dwingt de installatie door ondanks conflicten en kan meer onverwachte versies opleveren.
Pakketten die een plugin of bibliotheek zelf niet meelevert, maar wel verwacht in je project, in een bepaalde versie. Een plugin voor React verwacht bijvoorbeeld dat jouw project React heeft.
Hulp nodig van een mens? Website-onderhoud · Hosting en onderhoud · WordPress-support · Alle oplossingen