angular - Klarer ikke å løse avhengighetstre-feil når du installerer npm-pakker


Når jeg prøver å installere npm-pakkene ved å bruke npm i-kommandoen, får jeg følgende unntak:

Jeg har prøvd å installere Node.js-pakken på nytt og sette proxyen til av ved å bruke:

set HTTP_PROXY=
set HTTPS_PROXY=

Problemet er fortsatt der. Hva gjør jeg galt?

Oppdatering:

Når jeg kjører følgende kommando:

npm install --legacy-peer-deps

Følgende feil vises:

Svar #1

Dette er ikke relatert til en HTTP-proxy.

Du har avhengighetskonflikt (feil og potensielt ødelagt avhengighet) som det står, så prøv å kjøre kommandoen med --force, eller --legacy-peer-deps. Hvis det ikke virker, er den midlertidige løsningen å bruke tidligere versjoner av Node.js (nedgradere Node.js-versjonen) ettersom dette kan forårsake denne typen feil.

Oppdatering basert på OPs oppdatering:

Som du ser, gir det følgende feil:

Ingen matchende versjon funnet for @angular/http@^9.1.4.

Ta en titt på angular/http-siden. Merk at den nyeste versjonen for den utdaterte pakken er 7.2.16 mens du ber om en høyere versjon (f.eks. ^9.1.4)! Så prøv å sjekke prosjektavhengighetene og følg de oppståtte feilene for å løse problemet.

Svar #2

Prøv kommando-flagget --legacy-peer-deps.

Dette alternativet brukes når det møter kompatibilitetsproblemer med jevnaldrende avhengigheter i prosjektet. Jevnaldrende avhengigheter er en måte for en pakke å spesifisere at den er avhengig av en annen pakke, men ikke ønsker å inkludere den som en direkte avhengighet. Dette gjør det mulig for flere pakker å være avhengige av en felles pakke uten å ha flere kopier av den i prosjektet ditt.

Alternativet --legacy-peer-deps forteller pakkebehandleren (npm eller Yarn) å bruke en eldre, mer lempelig tilnærming når den løser og installerer pakker med konflikter i peer-avhengigheter. Det kan være nyttig hvis du jobber med eldre pakker som ikke har oppdatert sine peer-avhengighetsdefinisjoner for å samsvare med nyere oppførsel i pakkebehandleren.

npm install --legacy-peer-deps

Svar #3

Først å forstå problemet. Her er hva jeg har som feil:

npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving: [email 
npm ERR! Found: @angular/[email 
npm ERR! node_modules/@angular/common
npm ERR!   @angular/common@"11.0.3" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer @angular/common@"^9.1.0 || ^10.0.0" from @agm/[email 
npm ERR! node_modules/@agm/core
npm ERR!   @agm/core@"3.0.0-beta.0" from the root project

Først bør du begynne å lese problemet fra bunnen og opp. Her @agm/[email krever angular common 9.1.0 eller 10.0.0. Og den øverste meldingen sier at angular common som ble funnet faktisk er 11.0.3.

(Hvis du vil forstå avhengigheter litt bedre, her er en veldig enkel side: Hvordan npm3 fungerer)

dependencies — these are the essential dependencies that you rely on and call in your project’s code
devDependencies — these are your development dependencies, for example, a prettier library for formatting code
peerDependencies — if you set a peer dependency in your package.json, you are telling the person who installs your package that they need that dependency with the specified version
optionalDependencies — these dependencies are optional and failing to install them will not break the installation process
bundledDependencies — it’s an array of packages that will come bundled with your package. This is useful when some 3rd party library is not on NPM, or you want to include some of your projects as modules

Så hva bør løsningen være da? Problemet handler om peer-avhengigheter. Løsningen er å nedgradere angular common eller løsningen er å bruke eldre logikk for avhengigheter ved installasjon av pakker ved å bruke --legacy-peer-deps. Så --legacy-peer-deps prøver ikke å installere peerDependencies automatisk. Vil dette fungere for deg? Sannsynligvis, ja. Men du bør legge til spesifikke instruksjoner om hvordan man gjør det, eller gjøre bruken av --legacy-peer-deps automatisk for fremtidig installasjon av prosjektpakker med denne koden fra et av de tidligere svarene:

npm config set legacy-peer-deps true

I mitt tilfelle installerte jeg pakken og prøvde å kjøre ng serve, men fordi --legacy-peer-deps ble brukt, var det avhengighetspakker som ikke ble installert. Jeg måtte installere disse manuelt (fordi jeg ikke satte konfigurasjonen fra koden ovenfor). Til slutt, etter å ha installert omtrent fem pakker manuelt, alle med --legacy-peer-deps, havnet jeg på en pakke som ikke kunne installeres, og jeg prøvde ikke å fortsette, fordi prosjektet mitt kastet varsler som gal, og det var også mange pakker for revisjon. Så min beslutning var å ikke bruke denne pakken og å finne et alternativ.

Andre løsninger som jeg leste om underveis:

  • nedgradere Node.js til v14. Dette vil nedgradere npm. Det er mulig det ikke er v14, men dette var versjonen som ble mest brukt å nedgradere til.
  • Noen folk bruker Yarn for å tvinge pakkinstallasjon - personlig forstår jeg ikke hvordan dette fungerer, fordi jeg ikke har brukt Yarn.
  • nedgradering av Angular og den globale Angular CLI-versjonen til en versjon som vil oppfylle kravet. I mitt tilfelle er det angular/common, og i spørsmålet er det angular/core, men begge krever nedgradering av hele Angular, ikke sant (jeg er ikke sikker på dette her).
  • pakken du installerer kan ha en høyere versjon som ikke krever nedgradering av Angular. Du kan prøve å bruke https://updatepackagejson.com/ for å oppgradere pakkene dine til den nyeste, men dette gjelder hvis prosjektet ditt er ganske nytt.

Svar #4

I tillegg til å bruke --legacy-peer-deps kommandolinjealternativet, kan dette også settes mer permanent som en konfigurasjonsinnstilling:

npm config set legacy-peer-deps true

Svar #5

Når du bruker npm 7, dukker dette opp ofte fordi problemer med peer-avhengigheter behandles som feil i versjon 7, mens de vanligvis bare var advarsler i versjon 6. Vanligvis gjør bruk av --legacy-peer-deps at det fungerer med npm 7.

Når det ikke fungerer, er et alternativ å nedgradere til npm 6. Å nedgradere Node.js er ikke nødvendig (men heller ikke skadelig). Den relevante avhengighetsstyringskoden finnes i npm. Å nedgradere Node.js vil ofte fungere tilfeldig fordi det ofte også vil nedgradere npm.

Et annet alternativ som er mindre forstyrrende enn å nedgradere npm er å bruke npx for å bruke den forrige versjonen av npm bare for installasjonskommandoen: npx -p npm@6 npm install

Og når alt annet feiler, er det ofte verdt et forsøk å fjerne node_modules-mappen og package-lock.json, og deretter kjøre npm install igjen. Det gjenskaper node_modules og package-lock.json.

Svar #6

Først, utfør dette i terminalen din.

npm config set legacy-peer-deps true

For det andre, tøm hurtigbufferen:

npm cache clean --force

Og til slutt, utfør kommandoen din.

Svar #7

Dette skjer for noen pakker etter oppgradering til npm 7.

Parameter --legacy-peer-deps kan hjelpe:

npm i --legacy-peer-deps

Beskrevet her legacy-peer-deps

Får npm til å fullstendig ignorere peerDependencies når en pakke-tre bygges, som i npm versjonene 3 til 6.

Hvis en pakke ikke kan installeres på grunn av altfor strenge peerDependencies som kolliderer, gir den en måte å gå videre på for å løse situasjonen. ...

Du kan sette dette alternativet til true som standard (ikke anbefalt av npm):

npm config set legacy-peer-deps true

Eller bare vent til disse pakkene er oppdatert.

Svar #8

Problemet er relatert til en avhengighetskonflikt eller ødelagt avhengighet. Du kan fortsette ved å godta feil i avhengigheten ved å tvinge en installasjon.

Løsning: Bruke kommandoen med --force.

Kommandoen din vil være som npm install --force @your-npm-package.

Merk: Du kan bruke yarn for å installere en avhengighet hvis den er tilgjengelig for installasjon med yarn-pakkebehandleren.

Svar #9

Ansvarsfraskrivelse: Dette forutsetter at du bruker npm v7+

Merk: Hvis du følger instruksjonene til søskenkommentatorene, vil det opprette en bruker-spesifikk konfigurasjon som ikke vil synkronisere konsekvent på tvers av lagkamerater/maskiner/byggeagenter.

Prosjektbaserte eldre peer-avhengigheter

Du vil sannsynligvis ønske legacy-peer-deps koblet til prosjektet ditt slik at det sprer seg på tvers av maskiner/utviklere, og ikke forurenser de andre prosjektene dine.

npm config set legacy-peer-deps true --location project

Dette vil lage en lokal fil på .npmrc som du kan legge til i ditt repository:

legacy-peer-deps=true

Deretter kan du bare kjøre:

npm install

Deretter bekrefter du den oppdaterte låsefilen.

Husk, beliggenhet, beliggenhet, beliggenhet:

  • konfigurasjon per prosjekt (/path/to/my/project/.npmrc, se mer):

    npm config set legacy-peer-deps true --location project
    
  • per-bruker konfigurasjon (standard er $HOME/.npmrc, se mer)

    npm config set legacy-peer-deps true --location user
    

    eller, siden standardplasseringen uansett er bruker:

    npm config set legacy-peer-deps true
    
  • global konfigurering (standard er $PREFIX/etc/npmrc, se mer)

    npm config set legacy-peer-deps true --location global
    

    eller, som --global antyder --location global

    npm config set legacy-peer-deps true --global
    

For noen prosjekter kan det være ikke-trivt å fikse avhengigheter

I mitt tilfelle vil en kritisk avhengighet som vi har en eldre versjon av trekke inn webpack v3 (!) - men det er en byggeavhengighet for det prosjektet.

Den beste løsningen på kort sikt er å bruke legacy-peer-deps som en midlertidig løsning.

Hvis du er i en klemme, kan du også vurdere å forke avhengigheten og justere dens peer-avhengigheter deretter - og deretter peke prosjektet ditt til fork-en.

Svar #10

NPM kan brukes til å installere og administrere versjoner av avhengigheter i prosjektene dine.

Jeg hadde det samme problemet med React-versjoner i forhold til npm-versjonen:

npm-feil funnet types/[email

Så det kan være pakkeversjoner som må installeres basert på din package.json-fil.

Det gir feil i npm 7-versjonen og kan ikke installere Node.js-moduler.

Hvis du nedgraderer npm-versjonen til 6, vil de problemene bli til advarsler og problemet vil bli løst.

  • Prøv å bevise denne kommandoen: npm install -g npm@6

  • Sjekk om versjonen allerede er installert: npm --version

  • Fjern og installer node_modules-pakken:

    a) Fjern rm -rf node_modules

    b) Installer: npm i

Svar #11

Prøv å fjerne node modules og package-lock.json-filen og kjør kommandoen npm install eller prøv npm cache clean --force

Svar #12

Først prøvde jeg

npm install

Det ga meg feilen unable to resolve dependency tree og basert på hjelp-informasjonen fra denne kommandoen,

Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.

Jeg prøvde denne kommandoen:

npm install --legacy-peer-deps

Og det løste problemet mitt.

Svar #13

Prøv to alternativer for å løse dette problemet:

  • Alternativ 1: Slett mappen node_modules og filen package_lock.json etter å ha kjørt: npm cache clean --force etter npm i --force

  • Alternativ 2: kjør npm install --save --legacy-peer-deps

Svar #14

Du kan installere pakkene på to måter, den viser denne feilen:

ERESOLVE unable to resolve dependency tree
  1. Installer pakken ved å bruke npm install og ha --legacy-peer-deps

    npm install --save --legacy-peer-deps
    
  2. Dette er en kombinasjon av to kommandoer

    a. Sett legacy-peer-deps til true i npm config

    npm config set legacy-peer-deps true
    

    b. Nå installer pakker ved å bruke npm install

    npm install
    

Relaterte artikler