Por que o npm install diz que tenho dependências não atendidas?

404

Eu tenho um pacote de nós. Quando executo a npm installpartir da raiz do pacote, ele instala várias coisas, mas depois imprime várias mensagens de erro parecidas com esta:

npm WARN dependência não atendida / Usuários / seanmackesey / google_drive / code / explore / generator / node_modules / findup-sync / node_modules / glob requer graceful-fs@'~1.2.0 ', mas será carregado

Devo estar confuso sobre o que exatamente npm installfaz. Se detectar uma dependência, não deveria instalá-la? Sob quais condições ele me envia mensagens de erro como esta e como posso resolver as dependências?

Sean Mackesey
fonte

Respostas:

397

Eu acredito que é porque a resolução da dependência está um pouco quebrada, consulte https://github.com/npm/npm/issues/1341#issuecomment-20634338

A seguir, a solução possível:

  1. Precisa instalar manualmente os módulos de nível superior, contendo dependências não atendidas: npm install [email protected]

  2. Reestruture seu package.json. Coloque todos os módulos de alto nível (serve como uma dependência para outros módulos) na parte inferior.

  3. Execute o npm installcomando novamente .

O problema pode ser causado pela falha do npm ao baixar todo o pacote devido a tempo limite ou outra coisa.

Nota: Você também pode instalar os pacotes com falha manualmente também usando npm install [email protected].

Antes de executar npm install, executar as seguintes etapas pode ajudar:

  • remova node_modules usando rm -rf node_modules/
  • corre npm cache clean

Por que 'remover node_modules' às vezes é necessário? Quando um módulo aninhado falha na instalação durante npm install, o subseqüente npm installnão detectará as dependências aninhadas ausentes.

Se for esse o caso, às vezes é suficiente remover a dependência de nível superior desses módulos aninhados ausentes e executar npm installnovamente. Vejo

dule
fonte
22
Remover os módulos do nó e limpar o cache fez com que funcionasse para mim.
MarkoHiel
4
a remoção de 'node_modules', a execução de 'npm cache clean' e a execução de 'npm install' corrigiram meu problema. Eu tive que executar o 'npm_install' três vezes, até obter todas as dependências carregadas sem erros.
precisa saber é o seguinte
2
se npm cache cleannão funcionar por razões de acesso, tente sudo npm cache clean.
Soroush
12
@Soroush, cegamente, apenas adicionando sudo a coisas que não funcionam corretamente não as corrige magicamente, apenas significa que você não sabe o que está acontecendo.
Edgar Aroutiounian
5
por que alguma outra "solução" para o npm inclui rm r node_modules? e por que essa é realmente a única opção na maioria dos casos? Isso não é bem como eu descobrir um gerenciador de pacotes deve funcionar como
phil294
83

Aconteceu comigo quando o WIFI caiu durante uma npm install. A remoção node_modulese a nova execução npm installcorrigiram.

geon
fonte
26
e tente npm cache clean.
Ijse
5
Reinstalar o nó provavelmente não é necessário, mas entre isso npm cache cleane a remoção node_modules, esse conselho funcionou para mim.
RichLitt
@ RichLitt, Sim, fazer npm cache cleannão foi suficiente para mim, eu tive que remover o node_modulestambém para fazê-lo funcionar depois que a rede falhou durante a "instalação".
21415 Mark -linlin
Estou confuso sobre qual node_modulesdiretório remover? Eu tenho um problema semelhante com o erro/usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/readdir-scoped-modules requires graceful-fs@'^4.1.2'
wuliwong
11
@wuliwong O primeiro nível.
geon
33

Corrigi o problema usando essas linhas de comando

  • $ rm -rf node_modules/
  • $ sudo npm update -g npm
  • $ npm install

Está feito!

zatamina
fonte
5
Depois de executar atualização npm sudo -g npm, meu NPM foi inútil, qualquer tentativa de instalar resultados nada em "! ERR npm Não é possível encontrar o módulo 'leia-package-json'" im vai ter que se vote este
michaelb
Funcionou para mim e para outras pessoas, talvez você tenha um outro problema. Tente instalar o módulo read-package-json globalmente sudo npm install -g read-package-jsonou reinstale o npm
zatamine
8
ressalva: você não deve usar o sudo com npm, é sugerido alterar as permissões ou a propriedade do diretório que o npm deseja escrever também.
Sgnl
11
pode querer adicionar "npm cache clean" lá também
Alexander Mills
11
Não use sudocom npm
Grant
11

Atualizar o NPM para a versão mais recente pode ajudar bastante com isso. A resposta de dule acima está certa ao dizer que o gerenciamento de dependências está um pouco quebrado, mas parece que isso se aplica principalmente às versões mais antigas do npm.

O comando npm listfornece uma lista de todos os instalados node_modules. Quando atualizei da versão 1.4.2 para a versão 2.7.4, muitos módulos que foram sinalizados anteriormente WARN unmet dependencynão eram mais anotados como tal.

Para atualizar o npm, você deve digitar npm install -g npmno MacOSX ou Linux. No Windows, descobri que baixar e executar novamente o instalador do nodejs era uma maneira mais eficaz de atualizar o npm.

Stephen
fonte
Eu tive o mesmo problema com a versão npm distribuída nos repositórios do CentOS 7. Instalei a versão mais recente do npm a partir do node.js e o problema desapareceu. Por isso, acho que você tem razão, pode ser um problema com uma versão antiga.
Elouan Keryell-Even
9

As respostas acima não me ajudaram totalmente, mesmo após a exclusão do node_modulesdiretório.

Abaixo o comando me ajudou finalmente:

npm config set registry http://registry.npmjs.org/

Observe que isso puxa os módulos do nó por uma conexão HTTP insegura.

Src: https://stackoverflow.com/a/13119867/4082503

Vinay Vemula
fonte
Isso me ajudou e meu host estava redirecionando o tráfego.
dimiguel
11
@dimgl bom saber :)
Vinay Vemula
11
@Dejel você tentou as outras respostas também. Pode ser necessário executar npm installvárias vezes e / ou instalar manualmente alguns pacotes de nós, um por um.
Vinay Vemula
4

Para todos -- UNMET PEER DEPENDENCY, por ex. -- UNMET PEER DEPENDENCY [email protected], instale essa dependência npm install --save [email protected]até que você não tenha mais UNMET DEPENDENCIES.

Boa sorte.

Akash
fonte
11
Deixa-me com os mesmos erros, incluindo um novo:ERR! code 1
Wouter Vanherck 29/03
11
@WouterVanherck você pode tentar rm -rf node_modules, então npm cache cleane npm install. Se ainda assim não funcionar, eu sugiro que você novamente rm -rf node_modules, em seguida, npm i -g yarne depois yarn install. O fio é muito bom de gerenciar node_modules. Boa sorte.
Akash
11
Sim, peerDependenciesé para isso. Para levá-lo a uma escolha consciente da versão.
Kamafeather
3

Eu corro npm liste instalados todos os pacotes listados como não satisfeitas DEPENDÊNCIA

Por exemplo:

├── UNMET DEPENDENCY css-loader@^0.23.1
npm install css-loader@^0.23.1

achasinh
fonte
2

Isso resolveu para mim:

  1. Corrija os números de versão package.json, de acordo com os erros;
  2. Remove node_modules( rm -rf node_modules);
  3. Execute novamente npm install.

Repita essas etapas até que não haja mais erros.

user1585939
fonte
1

Alguma coisa na mesma linha, eu acrescentaria outro passo.

Observe que na versão npm> 1.4.9, 'npm install' instala o devDependencies. Primeiro tente remover os módulos e o cache existentes:

remove node_modules $ rm -rf node_modules/
run $ npm cache clean

Então tente:

npm install --dev
npm update --dev

Isso pelo menos resolverá a resolução de dependência recursiva.

John Doe
fonte
6
para que serve o sinalizador --dev?
Alexander Mills
1

--dev instalando o devDependencies recursivamente (e sua execução para sempre ...) como ele pode ajudar a resolver as diferenças de versão?

Você pode tentar remover a pasta node_moduls, limpar o cache npm e executar 'npm i' novamente

arielhad
fonte
1

Eu tive um problema semelhante ao instalar a CLI do React Native. Eu não tinha certeza de qual /node_modulesdiretório eu deveria remover depois de ler as respostas aqui. Eu acabei de correr

npm update -g

e foi capaz de instalar o pacote depois disso.

wuliwong
fonte
1

Eu estava tentando trabalhar em um sistema de implantação automatizado que é executado npm install, para que muitas dessas soluções não funcionassem para mim de forma automatizada. Eu não estava em condições de excluir / recriar node_modules/nem poderia alterar facilmente as versões do Node.js.

Então, acabei executando npm shrinkwrap- adicionando o npm-shrinkwrap.jsonarquivo ao meu pacote de implantação e executando as instalações a partir daí. Isso resolveu o problema para mim; com o arquivo shrinkwrap como um 'auxiliar', o npm parecia ser capaz de encontrar os pacotes certos e instalá-los para mim. (O Shrinkwrap também tem outros recursos, mas era para isso que eu precisava nesse caso em particular).

Uberbrady
fonte
1

Encontrei esse problema ao instalar pacotes de reação e funcionou para mim: npm install --save <package causing this error>

Korp
fonte
1

No meu caso, a atualização do npm resolveu.

sudo npm install -g npm
Marcelo Gumiero
fonte
1

npm installinstalará todos os pacotes de npm-shrinkwrap.json, mas poderá ignorá-los package.json, se não estiverem predefinidos no primeiro.

Se o seu projeto possui um npm-shrinkwrap.json, certifique-se de executar npm shrinkwrappara regenerá-lo sempre que adicionar / remover / alterar package.json.

Marius
fonte
0

Atualizando para 4.0.0

Atualizar para 4 é tão fácil quanto atualizar suas dependências angulares para a versão mais recente e verificar novamente se você deseja animações. Isso funcionará para a maioria dos casos de uso.

No Linux / Mac:

npm install @angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@latest typescript@latest --save 

No Windows:

npm install @angular/common@latest @angular/compiler@latest @angular/compiler-cli@latest @angular/core@latest @angular/forms@latest @angular/http@latest @angular/platform-browser@latest @angular/platform-browser-dynamic@latest @angular/platform-server@latest @angular/router@latest @angular/animations@latest typescript@latest --save

Em seguida, execute o comando ng serve ou npm start que você normalmente usa, e tudo deve funcionar.

Se você confia nas animações, importe o novo BrowserAnimationsModuleda @angular/platform-browser/animationssua raiz NgModule. Sem isso, seu código será compilado e executado, mas as animações acionarão um erro. As importações de @angular/coreforam descontinuadas, use importações do novo pacote

import { trigger, state, style, transition, animate } from '@angular/animations';.
Aman Agnihotri
fonte