O NPM não instala dependências do módulo


151

Este é meu package.jsonpara o módulo que estou incluindo no projeto pai:

{
  "version": "0.0.1",
  "name": "module-name",
  "dependencies": {
    "express": "3.3.4",
    "grunt": "0.4.1",
    "grunt-contrib-compass": "0.4.0",
    "grunt-contrib-copy": "0.4.1",
    "grunt-contrib-cssmin": "0.4.1",
    "grunt-contrib-jshint": "0.6.3",
    "grunt-contrib-requirejs": "0.4.1",
    "grunt-contrib-uglify": "0.2.2",
    "grunt-contrib-watch": "0.5.1",
    "grunt-express-server": "0.4.1",
    "grunt-karma": "0.4.5",
    "grunt-regex-replace": "0.2.5",
    "request": "2.25.0"
  },
  "scripts": {
    "postinstall": "grunt install"
  }
}

Uma coisa a observar é que este módulo está contido em um repositório particular e eu o incluo no pai, package.jsoncomo:"module-name": "git+ssh://git@myserver:user/module-name.git"


Seu package.json parece ok, assim como a linha usada para incluí-lo. Você recebeu uma mensagem de erro? O git está no seu caminho?
poida

1
Eu recebo nenhum erro por sa, as instalações do módulo mas meu postinstallscript falha porque locais gruntpacotes não são encontrados como eles não estão instalados por NPM
Ahmed Nuaman

1
Esse problema ainda existe em novembro de 2016. Eu fiz uma instalação limpa de um módulo de trabalho em um novo computador. A resposta de @ Mohsen corrigiu isso.
quer

Respostas:


152

Parece que você encontrou um bug que existe há algum tempo e ainda não tem solução. Existem vários problemas em aberto para este caso no repositório npm:

Na primeira pessoa, liste várias soluções alternativas que você pode tentar.

Uma solução alternativa pode ser (um pouco imprudente) listar explicitamente as dependências como dependentes de primeiro nível. Isso requer que você mantenha a lista, mas na prática ela precisa ser feita com pouca frequência.


1
@ Flame2057, é bom saber que você está sem sorte, embora não seja muito informativo. Você pode ir em frente e formular uma pergunta, espero que a comunidade tenha o conhecimento para resolver. Diverta-se!
allprog

Uma etapa adicional foi necessária para mim. Eu tive que clicar com o botão direito do mouse em "Dependências" no meu projeto e escolher "Restaurar Pacotes" depois de executar as outras etapas mencionadas aqui (exclua node_modules e package.lock.json e, em seguida, instale o npm).
Taersious

113

Eu tive um problema muito semelhante, remover a node_modulespasta inteira e reinstalar funcionou para mim. Aprendeu esse truque no programa IT Crowd !

rm -rf node_modules
npm install

Isso realmente funcionou para mim. Eu acho isso muito estranho - o que está causando essa falha? Independentemente disso, se eu excluir a pasta e executar novamente a instalação do npm, funcionará. Antes, nada seria instalado nesse subdiretório. Agora, tudo é instalado lá.
CtheGood

Obrigado @Moshen. Eu removi uma versão antiga do Node e fiz uma instalação limpa. Eu removi todos os meus node_modules / globalmente, mas esqueci de removê-los de alguns aplicativos existentes. Eu tive que excluir a pasta node_modules no diretório de cada aplicativo existente e executar npm install.
wilblack

O bom e velho "você tentou reiniciar do zero ?". Isso funcionou muito bem para mim.
Marco Aurélio Deleu

Embora seja bom saber que há uma solução alternativa, isso realmente parece 'reinicie sua máquina e tente novamente' e apenas oculta o problema real. Eu tenho um problema semelhante com a instalação do NPM (o processo é encerrado imediatamente sem mensagem) e uma das soluções alternativas é excluir a pasta node_modules e reinstalar; o que não me enche de confiança de que entendemos o que está acontecendo aqui.
18896 Kelly S. French

1
Isso funcionou para mim. Se eu pudesse marcar novamente com +1, como referência da IT Crowd.
texelate

32

Eu estou usando a máquina windows.

  1. Eu apaguei a pasta node_modules.
  2. De alguma forma, o arquivo package.lock.json está sendo criado. Eu apaguei esse arquivo.
  3. Em seguida, instale o npm.
  4. Construção limpa.
  5. Corre.

14
Essa resposta precisa ter mais amor. O arquivo package.lock.json estava me ferrando.
Mwilcox 12/12

16

se você herdou esse código, pode ser que as dependências e versões estejam bloqueadas e você tenha um arquivo ./npm-shrinkwrap.json.

se sua dependência não estiver listada nesse arquivo, ela nunca será instalada com o npm installcomando

você precisará instalar manualmente os pacotes e executar npm shrinkwrappara atualizar o arquivo shrinkwrap.


2
Eu tive um problema em que a instalação manual de um pacote criou um package-lock.jsonarquivo após a atualização para o nó 8.0.0 e npm 5.0.0. Depois disso, a execução npm installsó instalaria esse pacote em vez de todas as minhas dependências. A exclusão package-lock.jsone a nova execução npm installresolveram o problema para mim.
Monkpit

1
@ Monkpit Isso resolveu para mim também, obrigado! package-lock.jsonestava atrapalhando.
precisa

10

Eu suspeito que você esteja enfrentando o problema em que seu package.jsonarquivo não está no mesmo diretório que o seu Gruntfile.js. Ao executar seus grunt xxxcomandos, você recebe uma mensagem como:

Local Npm module "xxx" not found. Is it installed?

Por enquanto, a solução é:

  • Crie package.json no mesmo diretório que Gruntfile.js
  • Defina os módulos exigidos pelo seu projeto grunt
  • Executar npm installpara carregá-los localmente
  • Agora, o comando grunt necessário deve funcionar.

IMHO, é triste que não possamos ter módulos de resolução de problemas carregados de um módulo pai npm (por exemplo, package.json em um diretório pai dentro do mesmo projeto). A discussão aqui parece indicar que foi feita para evitar o carregamento de módulos "globais", mas acho que o que queremos é carregar dos módulos "meu projeto".


Portanto, esta é a estrutura do meu projeto pai (que é a que importa o projeto do submódulo): cl.ly/image/020E0b3I0t1A e a estrutura do meu projeto do submódulo : cl.ly/image/2q0L3l1v0s40 ; você pode ver que ambos contêm Gruntfile.jse ambos contêm package.jsono mesmo nível.
Ahmed Nuaman

1
Isso não é um problema grunt, é uma questão de npmnão instalar recursivamente as dependências no meu projeto de submódulo.
Ahmed Nuaman

9

OP pode ser verdadeiro para uma versão mais antiga do nó. No entanto, eu enfrentei o mesmo com o nó 4.4.1 também.

Pode muito bem estar vinculado à versão do nó que você está usando. Tente atualizar para uma versão mais recente. Certas dependências não são carregadas transitivamente se forem incompatíveis com a versão do nó.

Eu encontrei isso executando npm update.

Após a atualização para a versão mais recente (4.4 -> 5.9); isso foi consertado.


8

No meu caso, ajudou a remover node_modulese package-lock.json.

Depois disso, basta reinstalar tudo com npm install.


8

Verifique também se o nome do seu pacote foi aceito corretamente:

ERRADO:

{
    "name":"My Awesome Package"
}


CORRIGIR

{
    "name": "my-awesome-package-name"
}

1
Sim, eu tinha um espaço no nome e ele não foi instalado corretamente.
Ansjovis86 27/04

1
não apenas pelo espaço, também é sobre o '-' ele usou no nome, eu também enfrentei o mesmo problema, coloque - ou _ no nome, ele funcionará.
molagbal

4

Pode ser necessário instalar o grunt-cli, tente isso antes de fazer uma instalação do npm:

sudo npm install -g grunt-cli

Isso corrige o grunhido não sair para mim, você também precisará de um arquivo de grunhido válido.

Fonte: https://stackoverflow.com/a/16456467/241294


O que acontece quando você tenta o comando 'grunhido' no prompt de comando? Existe no seu caminho? Você está certo, parece que ele foi instalado a partir do seu pastebin. Você o instalou com sudo e -g?
poida

Não é um problema com o grunhido:~ ᐅ which grunt /opt/local/bin/grunt
Ahmed Nuaman

Também quando eu clonar o próprio repo, em vez de através de NPM e correr npm installe grunt install, ele funciona bem. O problema é que o NPM parece não instalar as dependências do package.json
repositório

Em qual diretório você está procurando as dependências de pacotes? Eles não devem estar no nível superior, mas em: pacote de nível superior / node_modules / module-name / node_modules. Será que o grunhido não está encontrando o arquivo grunhido porque está trabalhando no diretório errado?
poida

Não é um problema grunt: quando você instala módulos com o NPM, geralmente ele fornece um verão no final de qualquer dependência desse módulo que já foi instalado; Quando instalo o módulo em questão, não recebo nenhum módulo de dependência instalado.
Ahmed Nuaman

4

Caso alguém sofra dessa situação e cometa o mesmo erro que eu cometi, eis o que aconteceu no meu caso. Depois de bater minha cabeça contra a parede por uma hora, percebi que meu json estava aninhado incorretamente e a chave "dependências" estava dentro do "repositório" de chaves.
Escusado será dizer que nenhum erro foi evidente e nenhum módulo foi instalado.


3

Outra maneira de contornar isso é adicioná-lo à package.jsonseção de scripts do módulo

"preinstall": "npm install {Packages You depend on}"

o que isso faz é instalar todos os pacotes necessários ao módulo e você não receberá esse erro.


3

acontece com a versão do nó antigo. use a versão mais recente do nó como esta:

$ nvm use 8.0
$ rm -rf node_modules
$ npm install
$ npm i somemodule

editar: também verifique se você save.
por exemplo:npm install yourmoduleName --save


2

Eu estava recebendo esse erro quando instalei um ambiente de desenvolvimento Node limpo no Windows.

Para corrigir isso, entrei no meu novo diretório de projeto (com o qual acabei de montar yo angular) e digitei dois comandos:

npm install -g grunt --save-dev

Isso instalará as dependências locais locais no seu projeto. Próximo:

npm install

Isso garantirá que todas as suas (novas) dependências do projeto sejam instaladas.

Tada!


2

Vale mencionar para garantir que suas dependências devem estar na sua dependenciesparte package.json(ao contrário de devDependencies).

Meu problema era basicamente o mesmo que OP:

  • instalar um repositório particular (vamos chamá-lo repo1) via "module-name": "git+ssh://git@myserver:user/my-repo-name.git"em outro repositório (vamos chamá-lo repo2),
  • em repo2's node_modules, uma dependência de pacotes de repo1não estava lá.
  • Meu erro bobo! .. repo1estava listando essa dependência em devDependenciesvez dedependencies
  • Mova a dependência em meus repo1's package.jsona partir devDependencies dedependencies
  • Na minha repo2, tirei minha node_modulese package-lock.json, fiz npm install, uma voilà! ... a dependência estava lá!

Eu tinha declarado o NODE_ENV = produção variável de ambiente na minha Dockerfile acima do npm comando de instalação, o que provoca devDependencies não para ser instalado
Pieter De Clercq

0

Eu tive o mesmo problema. Mas na mesma máquina, um projeto tinha um bom package.json, onde todas as minhas dependências foram instaladas com sucesso. E em outro projeto, minhas dependências package.json não foram instaladas, não importa o que eu faça. Eu apenas copiei o package.json e colei naquele outro projeto. E funcionou! A diferença que encontrei foi apenas uma linha vazia no início do arquivo. Não sei ou influencia alguma coisa, talvez algum outro problema. Mas o problema era apenas o arquivo package.json.


0

Eu acho que também enfrentei esse problema, e a melhor solução que encontrei foi olhar para o meu console e descobrir o erro que estava sendo lançado. Portanto, li-o atentamente e descobri que o problema era que não especifiquei meu repositório, descrição e nome válido no meu package.json. Eu adicionei essas informações e estava tudo bem.

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.