Como instalar dependências entre pares npm automaticamente?

274

Por exemplo, quando instalo o Angular2:

npm install --save angular2
temp@1.0.0 /Users/doug/Projects/dougludlow/temp
├── angular2@2.0.0-beta.3 
├── UNMET PEER DEPENDENCY es6-promise@^3.0.2
├── UNMET PEER DEPENDENCY es6-shim@^0.33.3
├── UNMET PEER DEPENDENCY reflect-metadata@0.1.2
├── UNMET PEER DEPENDENCY rxjs@5.0.0-beta.0
└── UNMET PEER DEPENDENCY zone.js@0.5.11

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-promise@^3.0.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of rxjs@5.0.0-beta.0 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of zone.js@0.5.11 but none was installed.

Existe uma bandeira mágica que eu possa passar para o npm que instalará as dependências dos pares também? Não consegui encontrar um ... É tedioso copiar e colar manualmente as dependências dos pares e garantir que tenho as versões corretas.

Em outras palavras, eu prefiro não ter que fazer:

npm install --save angular2@2.0.0-beta.3 es6-promise@^3.0.2 es6-shim@^0.33.3 reflect-metadata@0.1.2 rxjs@5.0.0-beta.0 zone.js@0.5.11

Qual é a melhor maneira?

Douglas Ludlow
fonte
Você já resolveu esse problema? Tenho o mesmo problema ao instalar o angular2. Mesmo depois de instalar manualmente o es6-promessa com -g flag e tentar novamente o npm install -g angular2, recebo o mesmo erro / aviso de 5 dependências de pares não atendidas es6-promessa, es6-shim, reflect-metadata, rxjs e zone.js
Nttakr 04/02
4
@nttakr - sim, a instalação das versões exatas que ele deseja como dependências dos colegas se livra do aviso. Você não deseja instalá-los globalmente (com o sinalizador -g). Você deseja instalá-los localmente (sinalizador -S), mas como eu disse, eles precisam ser as versões exatas (ou seja: [email protected]requer es6-promise@^3.0.2). No entanto, quero saber se existe um comando / sinalizador que instala automaticamente as dependências dos pares.
Douglas Ludlow
@DouglasLudlow qual versão do NPM você está usando?
peteb
@peteb: npm -v=>3.5.3
Douglas Ludlow
Eu tenho o mesmo problema, e eu havn't rendimento solução encontrada ....
youngwind

Respostas:

178

A instalação automática de dependências entre pares foi removida explicitamente com o npm 3, pois causa mais problemas do que tentava resolver. Você pode ler sobre isso aqui, por exemplo:

Portanto, não, pelas razões expostas, você não pode instalá-los automaticamente com o npm 3 para cima.

migg
fonte
4
Sim, eu vi o seguinte: github.com/npm/npm/issues/6565 ... Eu só esperava que você ainda pudesse instalá-los opcionalmente com uma bandeira ou algo assim. Acho que vou ter que abrir um problema ou algo assim.
Douglas Ludlow
157
Como você lida com esse tipo de problema? Como não sou especialista em NPM, quando leio "x requer um par de y, mas nenhum foi encontrado", pergunto-me: "qual par?" e "como posso fazer tudo funcionar de novo?" Existe um processo? Você digita o código de xey até descobrir o que está faltando? Depois de descobrir o que está faltando, o que você faz a seguir? Obrigado!
Dan Cancro
81
Ah, é um problema em inglês: "x requer um par de y, mas nenhum foi instalado" deveria ser "x requer o par, y, mas y não foi instalado". Entendi como "x requer um dos pares de y, mas esse ponto não foi instalado e não estamos dizendo a você quais dos pares de y você precisa".
Dan Cancro
1
Além disso, se eu instalar manualmente as dependências de pares listados, eu obtê-los como extraneouspacotes
plsnoban
3
Existem "estranhos" porque você precisa adicioná-los às dependências do pacote.
Dinoboff 8/17
37

Eu o resolvi reescrevendo package.json com os valores exatos que os avisos eram sobre:

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.

package.json: "es6-shim": "^ 0.33.3",

npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2

package.json: "reflect-metadata": "0.1.2",

Delete node_modules directory

npm install
MrLehiste
fonte
15
Talvez um npm cache clean, npm installpode ser melhor do que limpar node_modules? Eu sempre evito excluir node_modules, gosto de descobrir qual é o problema, em vez de afastar o diretório.
285 Bruno
Não acho que seja uma ideia muito segura para as pessoas fazerem funcionar. Eles têm mudanças maiores de agravamento de seus conflitos: ter código que não corresponde à sua biblioteca.
zoomlar
Recebi a seguinte mensagem de erro ao tentar executar o cache limpo do npm: npm ERR! 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'. Por outro lado, se você estiver depurando um problema com o instalador, poderá npm install --cache /tmp/empty-cacheusar um cache temporário em vez de neutralizar o atual. npm ERR! npm ERR! Se tiver certeza de que deseja excluir todo o cache, execute novamente este comando com --force.
Tarun
22

Batota código útil neste cenário e alguns outros ...

UN── UNMET DEPENDENCY DE PARES @ angular / comum @ 4.0.2

UN── UNMET PEER DEPENDENCY @ angular / compilador @ 4.0.2

UN── UNMET PEP DEPENDENCY @ angular / compiler-cli @ 4.0.2

UN── UNMET DEPENDENCY DE PARES @ angular / core @ 4.0.2

UN── UNMET DEPENDENCY DE PARES @ angular / forms @ 4.0.2

UN── UNMET DEPENDENCY PEER @ angular / http @ 4.0.2

UN── UNMET DEPENDENCY PEER @ angular / navegador de plataforma @ 4.0.2

UN── UNMET DEPENDENCY DE PARES @ angular / dynamic-browser-dynamic @ 4.0.2>

  1. copie e cole seu erro no seu editor de código.
  2. Destaque uma parte indesejada com o seu cursor. Nesse caso, 'M── UNMET DEPENDENCY DEPENDENCY'
  3. Pressione comando + d várias vezes.
  4. Pressione excluir duas vezes . (Pressione espaço se você acidentalmente destacou '├── UNMET PEER DEPENDENCY'.)
  5. Pressione uma vez para cima. Adicione 'npm install'
  6. Pressione uma vez para baixo. Adicionar '--salvar
  7. Copie suas coisas de volta para o CLI e execute

npm install @ angular / comum @ 4.0.2 @ angular / compilador @ 4.0.2 @ angular / compiler-cli @ 4.0.2 @ angular / core @ 4.0.2 @ angular / forms @ 4.0.2 @ angular / http @ 4.0 .2 @ angular / plataforma-navegador @ 4.0.2 @ angular / plataforma-navegador-dinâmico @ 4.0.2 --save

zoomlar
fonte
8
--saveEvidentemente, a opção não é mais necessária a partir do npm 5.0.0: stackoverflow.com/a/19578808/12484
Jon Schneider
12

O projeto npm-install-peersirá detectar pares e instalá-los.

Por v1.0.1isso, ele não suporta a escrita package.jsonautomática, o que essencialmente resolveria nossa necessidade aqui.

Adicione seu suporte ao problema em voo: https://github.com/spatie/npm-install-peers/issues/4

profundidade
fonte
36
Ao correr, deu-me esta mensagem. This package doesn't seem to have any peerDependencies
Thabung
2
Eu tenho a mesma mensagem.
Thibault Boursier
7
Pelo que entendi, npm-install-peersinstalará peerDependenciesregistrado em package.json. Não instalará peerDependenciesdependências como angular2.
Drizzd
Sim, para o segundo comentário @drizzd: npm-install-peersdestina-se apenas à instalação do "peerDependencies"listado no package.json do seu projeto. Você está tentando instalar os "peerDependencies"listados em cada um de seus node_modules/<package>/package.jsonarquivos, não suas dependências diretas dos pares.
quer
5

Eu experimentei esses erros quando estava desenvolvendo um pacote npm que tinha peerDependencies. Eu tinha que garantir que algum peerDependenciestambém estivesse listado como devDependencies. O projeto não usaria automaticamente os pacotes instalados globalmente.

Joshweir
fonte
Esta é uma solução interessante, pois simplesmente adicionar a 'dependências' é um pouco desajeitado!
Ashot
0

Instale o fio e execute

global de fios adicionar install-peerdeps

Carlos
fonte
-5

Execute isto: npm install-test

Ivan Ferrer
fonte