Die globale Installation von npm Windows führt zu npm ERR! fremd


121

Ich bin neu zu grunzen und npm. Also versuche ich ein "Kochbuch-Beispiel" auf der Website " http://tech.pro/tutorial/1190/package-managers-an-introductory-guide-for-the-uninitiated-front-end-developer#front_end_developers ". . Sie sollten jetzt nicht dort suchen müssen, aber ich dachte, es könnte gut sein, die Website zu teilen. So weit so gut, bis es um die globale Installation geht. (Ok, einige Fehler musste ich herausfinden, aber jetzt arbeite ich npm).

Wenn es darum geht, etwas global zu installieren, stecke ich fest.

Was ich bisher getan habe, um die globale Installation eines Pakets zu testen:

  1. Testverzeichnis erstellt grunttest

  2. In diesem Verzeichnis:

    npm install -g jshint

Ausgabe kann ich sehen:

 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)

Ich erkenne gerade den 304, was in Ordnung sein sollte, da nur gesagt wird, dass die Ressource seit der letzten Installation (einige Minuten zuvor) nicht geändert wurde.

Überprüfen, ob der Jshint vorhanden ist mit:

`npm -global list`

Ausgabe:

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**

Fragen:

  1. Warum bekomme ich npm ERR! fremd ...?
  2. Was heißt das?
  3. Wie kann ich dieses Problem beheben?

Information:

Ich bin auf einem Windows-Computer Windows 7 und benutze Cygwin als Shell. Der Versuch, nur jshint ( jshint someTestfile.js) zu verwenden, funktioniert natürlich nicht.

Danke im Voraus, Meru

Antworten:


208

npm ERR! extraneousbedeutet, dass ein Paket installiert ist, aber nicht in Ihrem Projekt aufgeführt ist package.json.

Da Sie Pakete auflisten, die global installiert wurden, werden Sie viele irrelevante Fehler erhalten, die einfach ignoriert werden können, da die meisten global installierten Dinge nicht in Ihrem Projekt enthalten sind package.json.


1
Hallo! Danke für die Antwort. Bedeutet das auch, dass ich akut in der Lage sein sollte, den "jshint" auszuführen, richtig?
Meru

Richtig. Laufen jshint myfile.jssollte jshint laufen lassen myfile.js.
Kyle Robinson Young

1
Ah ich sehe. Mit Grunt geht alles durch Aufgaben. Sie würden die grunt-contrib-jshintAufgabe in Ihrem laden und konfigurieren Gruntfile.js. Das einzige, was Sie global installieren, ist npm i grunt-cli -gder Zugriff auf den gruntBefehl zum Ausführen von a Gruntfile.js. Weitere Informationen finden Sie in diesem Handbuch: gruntjs.com/getting-started
Kyle Robinson Young

8
Wenn Sie externe Bibliotheken lokal (nicht global) gespeichert haben, können Sie sie ausführen npm prune, um sie zu entfernen.
krx

2
@ KyleRobinsonYoung: Wie wäre es, dies als Antwort zu erwähnen. Sie können alle nicht verwendeten Pakete mitnpm prune --your-env
geek_guy

21

1 & 2: Dies bedeutet, dass Sie den jshint nicht in der package.json-Datei Ihres Projekts aufgeführt haben, sondern dass er global installiert ist. Es ist also kein großes Problem.

3: Um diesen irrelevanten Fehler zu vermeiden , können Sie die Installation mit der Option ausführen oder erneut ausführen --save. Dadurch wird Ihre package.json-Datei automatisch aktualisiert:

npm install -g jshint --save

Oder Sie müssen Ihre package.json-Datei manuell mit einem aktualisieren "dependencies": {...}


in ma Fällen funktioniert nur mit lokalen ohne globales Duplikat
BG BRUNO

2
--savefunktioniert nicht zusammen mit -g. Die globale Paketliste enthält keine package.json.
Guido Bouman

5

Ich habe dieses Problem behoben, indem ich npm updateim Ordner des übergeordneten Pakets einen Fehler gemacht habe, der einige der überflüssigen Pakete aus der Liste entfernt und dann npm uninstall <package>für die verbleibenden wenigen ausgeführt hat.

Scheint funktioniert zu haben, da ich danach keine Fehler mehr bekomme.


3

Ich habe es gelöst, indem ich alle Antworten kombiniert habe. Zuerst habe ich das Paket global installiert.

npm install -g packagename --save

Da npm dieses Paket auch global installiert hat, es aber nicht zu meiner lokalen Datei package.json hinzugefügt hat, musste ich etwas dagegen tun.

Ich wähle die Lösung, um die lokale zu entfernen und sie dann global zu installieren.

npm uninstall packagename
npm install -g packagename

Auf diese Weise habe ich keine Warnungen mehr und vermassle die Datei package.json nicht.


Plus 100. Ich musste lokal deinstallieren und global installieren.
Collin Peters

1

Ich mein Fall, ich habe diese 'npm ERR gesehen! fremde 'Nachricht in meinem Cygwin-Terminal, als ich ein' npm ls 'gemacht habe. Ich dachte, dies sei eine Art global beschädigtes Setup, nachdem ich viel gebastelt hatte. Ich lerne hier folgende Beobachtungen:

  • 'npm ls' gibt je nach aktuellem Ordner unterschiedliche Ausgaben aus.
  • 'npm ls' versucht, das Vorhandensein eines Ordners 'node_modules' am aktuellen Ordner zu erkennen und diese Inhalte aufzulisten. NICHT die globalen!
  • Wenn der aktuelle Ordner mit 'node_modules' auch eine package.json-Datei enthält, die weniger hier aufgeführte Module enthält, wird der Fehler angezeigt.

Ich 'rm package.json' und 'npm ls' zeigen keine Fehlermeldung mehr an. Ich sage also, dass immer der aktuelle Speicherort auf das Vorhandensein des Ordners 'node_modules' und der Datei package.json überprüft wird, da diese bei der Prüfung zuerst priorisiert werden. Wenn diese fehlen, wird die Prüfung im übergeordneten Ordner fortgesetzt und so weiter. und wenn Sie viele Codefragmente viel herumgebastelt haben, haben Sie möglicherweise viele, viele Ordner node_modules und die Datei package.json verstreut. Hier ist nichts wirklich beschädigt, im Gegensatz zu den Erfahrungen, die wir bei der J2EE Java-Entwicklung / Eclipse-IDE oder an den Tagen gemacht haben, an denen wir regedit verwenden müssen, um Einstellungen in Windows zu ändern.


1

In meinem Fall lag es daran, dass der Paketname in seiner package.jsonDatei nicht mit dem package.jsonim abhängigen Modul aufgeführten Abhängigkeitsnamen übereinstimmte . Mein Fehler, da es sich um ein neues Modul handelt, das ich erstellt habe, aber schwer zu erkennen ist, da npm keinen Hinweis gibt.

Dies geschah bei Verwendung der dependencies: { "my-module": "file:local-modules/mymodule" }Syntax mit einem Tippfehler im Namen "my-module".


0

Dies liegt an der Tatsache, dass sich Ihr Paket nicht in Ihrer package.json befindet. Wenn Sie es hinzufügen, wird das Problem gelöst, sehen Sie sich bitte das Bild unten an:

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.