Como corrijo o aviso npm UNMET PEER DEPENDENCY?

223

Estou no Windows 10, com Nó 5.6.0 e npm 3.6.0. Estou tentando instalar o material angular e o mdi na minha pasta de trabalho. O npm instala erros mdi de material angular com:

+-- angular@1.5.0

+-- UNMET PEER DEPENDENCY angular-animate@^1.5.0

+-- UNMET PEER DEPENDENCY angular-aria@^1.5.0

+-- angular-material@1.0.6

+-- UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- mdi@1.4.57

npm WARN enoent ENOENT: no such file or directory, open
'C:\Users\xxxxx\Desktop\ngClassifieds\package.json' 

npm WARN angular-material@1.0.6 requires a peer of
angular-animate@^1.5.0 but none was installed. 

npm WARN angular-material@1.0.6 requires a peer of angular-aria@^1.5.0
but none was installed. 

npm WARN angular-material@1.0.6 requires a peer of
angular-messages@^1.5.0 but none was installed.

Como resolvo isso para instalar o AngularJS Material e o MDI?

Reza
fonte
Esse tipo de erro cria algum problema?
Blackhawk
Não para Reza, de modo que seja tarde, mas por quaisquer outros ... Tente isto: ver npm peerDependencies angulares material
peter70
1
Em geral, nem sempre você pode resolver uma dependência não atendida. Por exemplo, alguns pacotes dependem de other-package@^1.5.0 e você tem [email protected] instalado, talvez não seja necessário reverter a versão. Seria melhor testar se você realmente está tendo problemas com a versão mais recente.
John Pankowicz
1
Consulte também Por que existem dependências entre pares?
Mikemaccana

Respostas:

203

O npm não instala mais dependências entre pares, portanto, você precisa instalá-las manualmente, basta fazer um npm installnos deps necessários e tentar instalar o principal novamente.


Responder para comentar:

está bem nessa mensagem, diz quais deps você está perdendo

UNMET PEER DEPENDENCY angular-animate@^1.5.0 +-- 
UNMET PEER DEPENDENCY angular-aria@^1.5.0 +-- angular-material@1.0.6 +
UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- mdi@1.4.57` 

Então você precisa npm install angular angular-animate angular-aria angular-material angular-messages mdi

Datsik
fonte
existe uma maneira de encontrar os deps para material angular para que eu possa instalar?
Reza
2
Você precisa adicionar essas novas dependências à sua package.json?
0xcaff
2
@caffinatedmonkey que seria o ideal
Datsik
9
@caffinatedmonkey se você especificar o --savenpm interruptor irá atualizar seu package.json para você (ou --save-devse o pacote é uma dependência de desenvolvimento)
McGuireV10
33
não é o ponto principal do npm fazer com que ele gerencie todas essas dependências para você? se eu fizer uma instalação do npm, obtenha uma lista de várias dependências não atendidas que tenho que adicionar manualmente ao meu arquivo composer.json manualmente, que valor estou recebendo do npm naquele momento?
ChileNUT 10/0318
66

UNMET PEER DEPENDENCYerro é lançado quando as dependências de um ou mais módulos especificados no package.jsonarquivo não são atendidas. Verifique os avisos com cuidado e atualize o package.jsonarquivo com versões corretas das dependências.

Então corra

rm -rf node_modules/
npm cache clean
npm install

Isso instalará todas as dependências necessárias corretamente.

JayKrish
fonte
3
o que é a dependência de pares
aWebDeveloper
Quando você instala um pacote, ele pode, por sua vez, depender de versões específicas de outros pacotes. Se você não fornecer uma versão dependente correta do pacote, a "dependência de pares" não será atendida. Portanto, você precisa atualizar a versão esperada dos pacotes dependentes para resolver isso.
JayKrish
4
Isso não funcionou para mim. Ainda recebi um aviso sobre a necessidade de um colega.
Adam Zerner
1
Muito mais limpo que a solução aceita! Esse conjunto de códigos trata todos os casos possíveis do problema da operação, em vez do problema específico que eles têm.
HoldOffHunger
o uso do comando npm cache clean fornece o erro: A partir do npm @ 5, o cache do npm se recupera automaticamente de problemas de corrupção e os dados extraídos do cache são válidos. Se você quiser garantir que tudo esteja consistente, use 'npm cache Verifique'. npm ERR! Se tiver certeza de que deseja excluir todo o cache, execute novamente este comando com --force.
codemonkey
30

No meu caso, todas as dependências já estavam lá. Atualize o NPM nesse caso, pois pode ter sido travado. Isso resolveu meu problema.

npm install -g npm
Anuj Sharma
fonte
Trabalhou para mim. Eu estava recebendo o erro UNMET PEER DEPENDENCY typescriptao tentar instalar tslint. depois de atualizar o npm, primeiro foi necessário instalar o typscript e depois instalar o tslint.
Ravimallya 18/09/17
Por alguma razão, tive que executá-lo mais de uma vez até que todas as suas próprias dependências fossem atualizadas.
Coderer
Isso quebrou a NPM para mim e resultou em vários erros.
Jack
14

O npm-install-peers funcionou para mim.

npm install -g npm-install-peers
alexoviedo999
fonte
1
Não funcionou para mim: "Este pacote não parece ter nenhuma dependência peer". No entanto, tenho várias mensagens como "npm ERR! Peer dep ausente: @ angular / common @ ^ 5.0.0 || ^ 6.0.0, exigido por @ agm / core @ 1.0.0-beta.3"
Almir Campos
2
Este pacote instala apenas deparações diretas de pares do pacote atual e as matrizes não lidam com as deparações de pares dos deps do pacote (pares de filhos).
Alex Skrypnyk
7

Uma das causas mais possíveis desse erro pode ser que você definiu uma versão mais antiga no seu package.json. Para resolver esse problema, altere as versões no package.json para corresponder às que o npm está reclamando.

Uma vez feito, execute o npm install e voila !!.

Thomas Mwania
fonte
6

Esta resposta não se aplica a todos os casos, mas se você não conseguir solucionar o erro simplesmente digitando npm install , essas etapas podem ajudar.

Digamos que você tenha esse erro.

UNMET PEER DEPENDENCY packageA@4.2.0

npm WARN packageB@3.3.0 requires a peer of packageA@^3.1.0 but none was installed.

Isso significa que você instalou a versão 4.2.0 do pacote A, mas o pacote [email protected] precisa da versão 3.xx do pakageA. ( explicação de ^ )

Portanto, você pode resolver esse erro fazendo o downgrade do pacote A para 3.xx, mas geralmente não deseja fazer o downgrade do pacote.
A boa notícia é que, em alguns casos, o packageB não está acompanhando o packageA e o mantenedor do packageB está tentando aumentar a dependência de pares do packageA para 4.xx.
Nesse caso, você pode verificar se há uma versão superior do packageB que requer a versão 4.2.0 do pacoteA no npm ou no github.

Por exemplo, vá para a página de lançamentoinsira a descrição da imagem aqui

Muitas vezes, você pode encontrar mudanças significativas sobre dependência como essa.

packageB v4.0.0-beta.0

BREAKING CHANGE
package: requires packageA >= v4.0.0

Se você não encontrar nada na página de lançamento, vá para a página de emissão e pesquise por palavra-chave como peer. Você pode encontrar informações úteis.

insira a descrição da imagem aqui

Neste ponto, você tem duas opções.

1) Atualize para a versão desejada
2) Deixe um erro por enquanto, aguarde até que a versão estável seja lançada.

Se você escolher a opção 1:
em muitos casos, a versão não possui latest tag, portanto, não é estável. Portanto, você deve verificar o que mudou nesta atualização e garantir que nada ocorra.

Se você escolher a opção 2:
se a atualização do pakageA da versão 3 para a 4 for trivial, ou se o mantenedor do pakageB ainda não testou a versão 4 do pakageA, mas diz que não deve ser problema, considere deixar o erro.

Nos dois casos, é melhor testar minuciosamente se não quebra nada.

Por fim, se você quer saber por que precisa fazer isso manualmente, este link explica bem.

ohkts11
fonte
3

Ok, então eu lutei por um longo tempo tentando descobrir isso. Aqui está a opção nuclear , para quando você tiver esgotado todas as outras formas.

Quando terminar, e ainda funcionar, importe seu código real para esse novo projeto. Corrija os erros de compilação da versão mais recente das causas angulares.

Foi o que fez por mim .. 1 hora de retrabalho vs 6 horas tentando descobrir o que estava errado .. gostaria de ter feito dessa maneira para começar ..

user230910
fonte
OP está usando AngularJS
Edric
3

A resposta dada nem sempre funciona. Se isso não resolver o seu problema. Verifique se você também está usando o símbolo correto no seu package.json. Isso é muito importante para corrigir essa dor de cabeça. Por exemplo:

warning " > @angular/[email protected]" has incorrect peer dependency "typescript@>=2.4.2 <2.7".
warning " > [email protected]" has incorrect peer dependency "typescript@>=2.4.2 <2.6".

Então, meu texto datilografado precisa estar entre 2.4.2 e 2.6, certo?

Então, mudei minha biblioteca de tipos de texto de usar "typescript": "^2.7"para usar "typescript": "^2.5". Parece correto?

Errado.

O ^meio que você concorda com o npm usando "typescript": "2.5"or "2.6"ou "2.7"etc ...

Se você quiser saber o que o ^e ~-lo ver média: Qual é a diferença entre o til (~) e acento circunflexo (^) em package.json?

Você também precisa se certificar de que o pacote existe. Talvez não seja possível "typescript": "2.5.9"consultar os números dos pacotes. Para ser realmente seguro, basta remover o ~ou o ^se você não quiser ler o que eles significam.

Samuel Thompson
fonte
Obrigado por esta explicação. O que acontece se eu usar duas bibliotecas em que a primeira (por exemplo library-one) usa, por exemplo, um par de package@<2.6e a outra ( library-two) um par de package@>2.7? Então, acabarei tendo que lidar com duas versões da packageminha base de código? Como vou saber que, quando eu uso library-one, tenho que usá-lo [email protected]enquanto isso, quando eu uso library-two, tenho que usá-lo [email protected]?
tonix 04/03
2

Atualmente disponível no Angular 2 rc.7 , e eu tive um problema semelhante com a [email protected]UNMET PEER DEPENDENCY.

Se você, como eu, simplesmente substituiu @angular/...rc.6a @angular/...rc.7- não é suficiente. Porque, por exemplo, @angular/routernão tem rc.6versão.

Nesse caso, revise melhor package.json em Início rápido

ktretyak
fonte
OP está usando AngularJS
Edric
-6

você pode resolver instalando as dependências UNMET globalmente.

exemplo: npm install -g @ angular / common @ 4.4.6

instale cada um por um. funcionou para mim.

Srinivas Jatoth
fonte
Essa é realmente a melhor solução, pensou? Instalando globalmente para ignorar o "problema" real das dependências do projeto?
Qx3 30/05
1
Isso instalará dependências globalmente em sua máquina. Seus colegas não poderão responder por isso em um ambiente compartilhado.
AC Patrice