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?


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: angular2@2.0.0-beta.3requer 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.


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

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


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


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.


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


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.