NPM n'installe pas les dépendances de module


151

Ceci est mon package.jsonpour le module que j'inclus dans le projet parent:

{
  "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"
  }
}

Une chose à noter est que ce module est contenu dans un dépôt privé et je l'inclus dans le parent package.jsoncomme:"module-name": "git+ssh://git@myserver:user/module-name.git"


Votre package.json semble correct, tout comme la ligne que vous utilisez pour l'inclure. Recevez-vous un message d'erreur? Est-ce que git est sur votre chemin?
poida

1
Je n'obtiens aucune erreur par sa, le module s'installe mais mon postinstallscript échoue car les gruntpackages locaux ne sont pas trouvés car ils ne sont pas installés par NPM
Ahmed Nuaman

1
Ce problème existe toujours en novembre 2016. J'avais fait une installation propre d'un module de travail sur un nouvel ordinateur. La réponse de @ Mohsen l'a corrigé.
Joe Lapp

Réponses:


152

Il semble que vous ayez rencontré un bogue qui existe depuis un certain temps et qui n'a pas encore de solution. Il existe plusieurs problèmes ouverts pour ce cas dans le référentiel npm:

Dans le premier, les personnes répertorient plusieurs solutions de contournement que vous pouvez essayer.

Une solution alternative peut être (un peu hackish) de lister explicitement les dépendances comme dépendants de premier niveau. Cela vous oblige à maintenir la liste, mais cela doit être fait très rarement.


1
@ Flame2057 il est bon de savoir que vous n'avez pas de chance, mais pas trop informatif. Vous pouvez aller de l'avant et formuler une question, j'espère que la communauté a les connaissances à résoudre. S'amuser!
allprog

Une étape supplémentaire était nécessaire pour moi. J'ai dû faire un clic droit sur "Dépendances" dans mon projet et choisir "Restaurer les packages" après avoir effectué les autres étapes mentionnées ici (supprimer node_modules et package.lock.json, puis npm install).
Taersious

114

J'ai eu un problème très similaire, la suppression du node_modulesdossier entier et la réinstallation ont fonctionné pour moi. J'ai appris cette astuce lors de l'émission IT Crowd !

rm -rf node_modules
npm install

Cela a fonctionné pour moi. Je pense que c'est vraiment bizarre - qu'est-ce qui cause ce problème? Quoi qu'il en soit, si je supprime le dossier et relance l'installation de npm, cela fonctionne. Auparavant, rien ne s'installerait dans ce sous-répertoire. Maintenant, tout y est installé.
CtheGood

Merci @Moshen. J'avais supprimé une ancienne version de Node et fait une nouvelle installation. J'ai supprimé tous mes node_modules / globalement mais j'ai oublié de supprimer ensuite de certaines applications existantes. J'ai dû supprimer le dossier node_modules dans le répertoire de chaque application existante, puis exécuter npm install.
wilblack

Le bon vieux "avez-vous essayé de redémarrer à partir de zéro approche?". Cela a très bien fonctionné pour moi.
Marco Aurélio Deleu

Bien qu'il soit bon de savoir qu'il existe une solution de contournement, cela ressemble vraiment à «redémarrer votre machine et réessayer» et masque simplement le vrai problème. J'ai un problème similaire avec l'installation de NPM (le processus se termine immédiatement sans message) et l'une des solutions de contournement consiste à supprimer le dossier node_modules et à le réinstaller; ce qui ne me donne pas la certitude que nous comprenons ce qui se passe ici.
Kelly

1
Cela a fonctionné pour moi. Si je pouvais encore +1 pour la référence IT Crowd, je le ferais.
texelate

33

J'utilise une machine Windows.

  1. J'ai supprimé le dossier node_modules.
  2. D'une manière ou d'une autre, le fichier package.lock.json est créé. J'ai supprimé ce fichier.
  3. Puis npm install.
  4. Construction propre.
  5. Courir.

14
Cette réponse a besoin de plus d'amour. Le fichier package.lock.json me dérangeait.
mwilcox

16

si vous avez hérité de ce code, il se peut que les dépendances et les versions aient été verrouillées et que vous ayez un fichier ./npm-shrinkwrap.json.

si votre dépendance n'est pas répertoriée dans ce fichier, elle ne sera jamais installée avec la npm installcommande.

vous devrez installer manuellement les packages, puis exécuter npm shrinkwrappour mettre à jour le fichier d'emballage.


2
J'ai eu un problème où l'installation manuelle d'un package avait créé un package-lock.jsonfichier après la mise à jour vers le nœud 8.0.0 et npm 5.0.0. Après cela, l'exécution npm installn'installerait que ce package au lieu de toutes mes dépendances. La suppression package-lock.jsonet la réexécution ont npm installrésolu le problème pour moi.
Monkpit

1
@Monkpit Cela a également résolu le problème pour moi, merci! package-lock.jsonse mettait en travers du chemin.
VirtualWolf

10

Je soupçonne que vous faites face au problème où votre package.jsonfichier ne se trouve pas dans le même répertoire que le vôtre Gruntfile.js. Lorsque vous exécutez vos grunt xxxcommandes, vous obtenez un message d'erreur du type:

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

Pour l'instant, la solution est:

  • Créez package.json dans le même répertoire que Gruntfile.js
  • Définissez les modules requis par votre projet grunt
  • Exécutez npm installpour les charger localement
  • Maintenant, la commande grunt requise devrait fonctionner.

À mon humble avis, il est triste que nous ne puissions pas avoir de modules de résolution de grognement chargés à partir d'un module npm parent (c'est-à-dire package.json dans un répertoire parent au sein du même projet). La discussion ici semble indiquer que cela a été fait pour éviter de charger des modules "globaux", mais je pense que ce que nous voulons, c'est charger à la place des modules "mon projet".


Voici donc la structure de mon projet parent (c'est celui qui importe le projet de sous-module): cl.ly/image/020E0b3I0t1A et la structure de mon projet de sous-module: cl.ly/image/2q0L3l1v0s40 ; vous pouvez voir que les deux contiennent Gruntfile.jset les deux contiennent package.jsonle même niveau.
Ahmed Nuaman

1
Ce n'est pas un problème avec grunt, c'est un problème avec l' npminstallation récursive des dépendances dans mon projet de sous-module.
Ahmed Nuaman

9

OP peut être vrai pour une ancienne version de node. Cependant, j'ai également fait face à la même chose avec le nœud 4.4.1.

Il peut très bien être lié à la version du nœud que vous utilisez. Essayez de passer à une dernière version. Certaines dépendances ne se chargent pas de manière transitoire si elles sont incompatibles avec la version du nœud.

J'ai trouvé cela en courant npm update.

Après la mise à niveau vers la dernière version (4.4 -> 5.9); cela a été corrigé.


8

Dans mon cas, cela a aidé à supprimer node_moduleset package-lock.json.

Après cela, réinstallez tout avec npm install.


8

Vérifiez également que le nom de votre colis est correctement accepté:

FAUX:

{
    "name":"My Awesome Package"
}


CORRECT

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

1
Ouais, j'avais un espace dans le nom et il ne s'est pas installé correctement.
Ansjovis86

1
non seulement pour l'espace, il s'agit également du «-» qu'il a utilisé dans le nom, j'ai également rencontré le même problème, mettez - ou _ dans le nom, cela fonctionnera.
molagbal

4

Vous devrez peut-être installer le grunt-cli, essayez ceci avant de faire une installation npm:

sudo npm install -g grunt-cli

Cela corrige le grunt ne se ferme pas pour moi, vous aurez également besoin d'un fichier grunt valide.

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


Que se passe-t-il lorsque vous essayez la commande «grunt» à votre invite de commande? Existe-t-il sur votre chemin? Vous avez raison, il semble qu'il soit installé à partir de votre pastebin. L'avez-vous installé avec sudo et -g?
poida

Ce n'est pas un problème avec grunt:~ ᐅ which grunt /opt/local/bin/grunt
Ahmed Nuaman

De même , lorsque je clone le repo lui - même, plutôt que par NPM et exécuter npm installet grunt install, cela fonctionne très bien. Le problème est que NPM ne semble pas installer les dépendances du repo comme spécifié dans lepackage.json
Ahmed Nuaman

Dans quel répertoire recherchez-vous les dépendances des packages? Ils ne devraient pas être au niveau supérieur, mais sous: package-de-haut niveau / modules_noeud / nom-module / modules_noeud. Se pourrait-il que grunt ne trouve pas le fichier grunt parce qu'il fonctionne dans le mauvais répertoire?
poida

Ce n'est pas un problème avec grunt, lorsque vous installez des modules avec NPM, il fournit généralement un résumé à la fin de toutes les dépendances de ce module qui ont déjà été installées; lorsque j'installe le module en question, je ne reçois pas un résumé des modules de dépendance installés.
Ahmed Nuaman

4

Juste au cas où quelqu'un souffrirait de cette situation difficile et ferait la même erreur d'anine que moi, voici ce que c'était dans mon cas. Après m'être cogné la tête contre le mur pendant une heure, je me suis rendu compte que mon json était incorrectement imbriqué et que les «dépendances» clés se trouvaient à l'intérieur du «référentiel» de clés.
Inutile de dire qu'aucune erreur n'était évidente et qu'aucun module n'a été installé.


3

Une autre façon de contourner ce problème consiste à l'ajouter dans la package.jsonsection des scripts de votre module

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

ce que cela fera, c'est qu'il installera tous les packages nécessaires au module et vous n'obtiendrez pas cette erreur.


3

se produit avec l'ancienne version du nœud. utilisez la dernière version du nœud comme ceci:

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

edit: assurez-vous également que vous save.
par exemple:npm install yourmoduleName --save


2

Je recevais cette erreur lorsque j'ai installé un environnement de développement Node propre sur Windows.

Pour résoudre ce problème, je suis allé dans mon nouveau répertoire de projet (avec lequel je viens de créer un échafaudage yo angular) et j'ai tapé deux commandes:

npm install -g grunt --save-dev

Cela installera les dépendances Grunt locales dans votre projet. Prochain:

npm install

Cela garantira que toutes vos (nouvelles) dépendances de projet sont installées.

Tada!


2

Il vaut la peine de mentionner pour vous assurer que vos dépendances doivent être dans la dependenciespartie de votre package.json(par opposition à devDependencies).

Mon problème était fondamentalement le même que OP:

  • installer un dépôt privé (appelons-le repo1) via un "module-name": "git+ssh://git@myserver:user/my-repo-name.git"autre dépôt (appelons-le repo2),
  • dans repo2's node_modules, une dépendance de package de repo1n'était pas là.
  • Mon erreur stupide! .. a repo1été d'inscrire cette dépendance au devDependencieslieu dedependencies
  • Déplacer la dépendance dans mes repo1« s package.jsonde devDependencies ladependencies
  • Dans mon repo2, j'ai enlevé ma node_moduleset package-lock.json, fait npm install, voilà! ... la dépendance était là!

J'avais déclaré la variable d'environnement de production NODE_ENV = dans mon Dockerfile au-dessus de la commande npm install, ce qui empêche l'installation de devDependencies
Pieter De Clercq

0

J'ai eu le même problème. Mais sur la même machine, un projet avait un bon package.json, où toutes mes dépendances sont installées avec succès. Et dans un autre projet, mes dépendances package.json n'ont pas été installées quoi que je fasse. J'ai juste copié le package.json et collé dans cet autre projet. Et ça a marché! La différence que j'ai trouvée n'était qu'une ligne vide au début du fichier. Je ne sais pas ou cela influence quoi que ce soit, peut-être un autre problème. Mais le problème était uniquement le fichier package.json.


0

Je pense que j'ai également fait face à ce problème, et la meilleure solution que j'ai trouvée était de regarder ma console et de comprendre l'erreur qui était lancée. Donc, je l'ai lu attentivement et j'ai trouvé que le problème était que je n'avais pas spécifié mon dépôt, ma description et mon nom valide dans mon package.json. J'ai ajouté ces informations et tout allait bien.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.