npm windows install globalement entraîne npm ERR! étranger


121

Je suis nouveau pour grogner et npm. J'essaye donc un "exemple de livre de cuisine" sur le site ' http://tech.pro/tutorial/1190/package-managers-an-introductory-guide-for-the-uninitiated-front-end-developer#front_end_developers ' . Vous ne devriez pas avoir à chercher là-bas maintenant, mais j'ai pensé qu'il serait bon de partager le site. Jusqu'ici tout va bien, jusqu'à ce qu'il s'agisse de l'installation globale. (Ok, quelques erreurs que j'ai dû résoudre, mais maintenant je travaille npm).

Quand il s'agit d'essayer d'installer quelque chose de manière globale, je reste bloqué.

Ce que j'ai fait jusqu'à présent pour tester globalement l'installation d'un package:

  1. Répertoire de test créé grunttest

  2. Dans ce répertoire:

    npm install -g jshint

Sortie que je peux voir:

 npm http GET https://registry.npmjs.org/jshint
 npm http 304 https://registry.npmjs.org/jshint
 ...
 npm http 304 https://registry.npmjs.org/string_decoder
 C:\Program Files\nodejs\node_modules\npm\jshint -> C:\Program Files\nodejs\node_modules\npm\node_modules\jshinnt
 jshint@2.4.4 C:\Program Files\nodejs\node_modules\npm\node_modules\jshint
 ├── console-browserify@0.1.6
 ├── exit@0.1.2
 ├── underscore@1.4.4
 ├── shelljs@0.1.4
 ├── minimatch@0.2.14 (sigmund@1.0.0, lru-cache@2.5.0)
 ├── cli@0.4.5 (glob@3.2.9)
 └── htmlparser2@3.3.0 (domelementtype@1.1.1, domutils@1.1.6, domhandler@2.1.0, readable-stream@1.0.26-2)

Je viens de me rendre compte que le 304, ce qui devrait être correct, car il dit simplement que la ressource n'a pas été modifiée depuis la dernière installation (quelques minutes avant).

Vérifier si le jshint existe avec:

`npm -global list`

Production:

npm@1.4.3 C:\Program Files\nodejs\node_modules\npm
├── abbrev@1.0.4
├── ansi@0.2.1
├─...
├──
├── graceful-fs@2.0.2
├── inherits@2.0.1
├── ini@1.1.0
├─┬ init-package-json@0.0.14
│ └── promzard@0.2.1
├─┬ jshint@2.4.4 extraneous
│ ├─┬ cli@0.4.5
│ │ └─┬ glob@3.2.9
│ │   └── inherits@2.0.1
│ ├── console-browserify@0.1.6
│ ├── exit@0.1.2
│ ├─┬ htmlparser2@3.3.0
│ │ ├── domelementtype@1.1.1
│ │ ├── domhandler@2.1.0
│ │ ├── domutils@1.1.6
│ │ └─┬ readable-stream@1.0.26-2
│ │   └─... ├── text-table@0.2.0
├── uid-number@0.0.3
└── which@1.0.5

**npm ERR! extraneous: jshint@2.4.4 C:\Program Files\nodejs\node_modules\npm\node_modules\jshint npm**

Des questions:

  1. Pourquoi est-ce que je reçois npm ERR! étranger ...?
  2. Qu'est-ce que ça veut dire?
  3. Comment puis-je résoudre ce problème?

Information:

Je suis sur une machine Windows 7, utilisant cygwin comme shell. essayer de juste le jshint ( jshint someTestfile.js) ne fonctionne bien sûr pas.

Merci d'avance, Meru

Réponses:


208

npm ERR! extraneoussignifie qu'un package est installé mais n'est pas répertorié dans votre projet package.json.

Étant donné que vous répertoriez les packages qui ont été installés dans le monde, cela va vous donner beaucoup d'erreurs superflues qui peuvent être simplement ignorées car la plupart des éléments installés dans le monde ne seront pas dans votre projet package.json.


1
salut! Merci d'avoir répondu. Cela signifie-t-il aussi que je devrais être en mesure d'exécuter le "jshint", n'est-ce pas?
Meru

Correct. L'exécution jshint myfile.jsdoit exécuter jshint sur myfile.js.
Kyle Robinson Young

1
Ah, je vois. Avec Grunt, tout passe par des tâches. Vous chargez et configurez la grunt-contrib-jshinttâche dans votre fichier Gruntfile.js. La seule chose que vous installez globalement est npm i grunt-cli -gce qui vous donne accès pour exécuter la gruntcommande pour exécuter un fichier Gruntfile.js. Voir ce guide pour plus d'informations: gruntjs.com/getting-started
Kyle Robinson Young

8
Si vous avez des bibliothèques étrangères enregistrées localement (pas globalement), vous pouvez exécuter npm prunepour vous en débarrasser.
krx

2
@KyleRobinsonYoung: Que diriez-vous de mentionner cela en réponse. Vous pouvez supprimer tous les paquets inutilisés en utilisantnpm prune --your-env
geek_guy

21

1 & 2: Cela signifie que vous n'avez pas le jshint listé dans le fichier package.json de votre projet mais qu'il est installé globalement. Ce n'est donc pas un gros problème.

3: pour éviter ce superflu erreur , vous pouvez exécuter ou réexécuter l'installation avec l'option --save. Cela mettra à jour automatiquement votre fichier package.json:

npm install -g jshint --save

Ou vous devez mettre à jour manuellement votre fichier package.json avec un "dependencies": {...}


dans les cas de ma fonctionne uniquement avec local sans doublon global
BG BRUNO

2
--savene fonctionne pas avec -g. La liste globale des packages n'a pas de package.json.
Guido Bouman

5

J'ai résolu cela en faisant un npm updatedans le dossier du package parent qui a supprimé certains des packages superflus de la liste, puis npm uninstall <package>pour les quelques autres.

Semble avoir fonctionné, car je n'obtiens aucune erreur après avoir fait cela.


3

Je l'ai résolu en combinant toutes les réponses. Au début, j'ai installé le package globalement.

npm install -g packagename --save

Étant donné que npm a également installé ce pack globalement mais ne l'a pas ajouté à mon fichier package.json local, j'ai dû faire quelque chose à ce sujet.

Je choisis, la solution pour supprimer le local puis l'installer globalement.

npm uninstall packagename
npm install -g packagename

De cette façon, je n'ai plus d'avertissements et je ne gâche pas le fichier package.json.


Plus 100. J'ai dû désinstaller localement et installer globalement.
Collin Peters

1

Dans mon cas, j'ai vu ce 'npm ERR! 'message superflu dans mon terminal cygwin lorsque j'ai fait un' npm ls '. Je pensais que c'était une sorte de configuration globalement corrompue après avoir beaucoup bricolé. J'apprends ici les observations suivantes:

  • 'npm ls' donne différentes sorties en fonction de l'emplacement actuel de votre dossier.
  • 'npm ls' essaie de détecter la présence d'un dossier 'node_modules' à l'emplacement actuel du dossier, et répertorie ce contenu. PAS les globaux!
  • De plus, si le dossier actuel contenant 'node_modules' a également un fichier package.json contenant moins de modules répertoriés ici, l'erreur s'affiche.

Je 'rm package.json' et 'npm ls' n'affiche plus de message d'erreur. Je dis donc que toujours vérifier l'emplacement actuel pour la présence du dossier 'node_modules' et du fichier package.json car ils sont priorisés en premier dans la vérification et si ceux-ci sont manquants, la vérification continue vers le dossier parent et ainsi de suite, et si vous avez beaucoup bricolé beaucoup d'extraits de code, alors vous avez peut-être éparpillé beaucoup de dossiers node_modules et de fichiers package.json. Rien n'est vraiment corrompu ici, contrairement à ces expériences que nous avons lors du développement J2EE Java / EDI eclipse ou pendant les jours où nous devons utiliser regedit pour modifier les paramètres de Windows.


1

Dans mon cas, c'était parce que le nom du package dans son package.jsonfichier n'était pas le même que le nom de la dépendance répertorié dans lepackage.json de la dépendance module dépendant. Mon erreur, car c'est un nouveau module que j'ai créé, mais difficile à repérer, car npm ne donnera aucun indice.

Cela s'est produit lors de l'utilisation de la dependencies: { "my-module": "file:local-modules/mymodule" }syntaxe, avec une faute de frappe dans le nom "mon-module".


0

Cela est dû au fait que votre package n'est pas dans votre package.json. Si vous l'ajoutez, le problème sera résolu, veuillez regarder l'image ci-dessous:

entrez la description de l'image ici

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.