NPM installiert keine Modulabhängigkeiten


151

Dies ist meine package.jsonfür das Modul, das ich in das übergeordnete Projekt einbinde:

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

Eine Sache zu beachten ist, dass dieses Modul in einem privaten Repo enthalten ist und ich es package.jsonwie folgt in das übergeordnete Modul einbinde :"module-name": "git+ssh://git@myserver:user/module-name.git"


Ihre package.json sieht in Ordnung aus, ebenso wie die Zeile, in der Sie sie einfügen. Erhalten Sie eine Fehlermeldung? Ist git auf deinem Weg?
Poida

1
Ich erhalte keine Fehlermeldung, das Modul wird installiert, aber mein postinstallSkript schlägt fehl, da lokale gruntPakete nicht gefunden werden, da sie nicht von NPM installiert wurden
Ahmed Nuaman

1
Dieses Problem besteht noch im November 2016. Ich hatte eine Neuinstallation eines Arbeitsmoduls auf einem neuen Computer durchgeführt. @ Mohsens Antwort hat es behoben.
Joe Lapp

Antworten:


152

Es sieht so aus, als hätten Sie einen Fehler gefunden, der schon eine ganze Weile existiert und noch keine Lösung hat. Für diesen Fall gibt es im npm-Repository mehrere offene Probleme:

In der ersten Liste werden mehrere Problemumgehungen aufgeführt, die Sie ausprobieren können.

Eine alternative Lösung kann (ein wenig hackisch) sein, die Abhängigkeiten explizit als Abhängige der ersten Ebene aufzulisten. Dies erfordert, dass Sie die Liste pflegen, aber praktisch muss dies sehr selten durchgeführt werden.


1
@ Flame2057 Es ist gut zu wissen, dass du kein Glück hast, wenn auch nicht zu informativ. Sie können fortfahren und eine Frage formulieren, hoffentlich hat die Community das Wissen, um sie zu lösen. Habe Spaß!
Allprog

Ein zusätzlicher Schritt war für mich erforderlich. Ich musste in meinem Projekt mit der rechten Maustaste auf "Abhängigkeiten" klicken und "Pakete wiederherstellen" auswählen, nachdem ich andere hier erwähnte Schritte ausgeführt hatte (lösche node_modules und package.lock.json, dann npm install).
Taersious

113

Ich hatte ein sehr ähnliches Problem: Das Entfernen des gesamten node_modulesOrdners und die Neuinstallation funktionierten für mich. Habe diesen Trick von der IT Crowd Show gelernt !

rm -rf node_modules
npm install

Das hat bei mir tatsächlich funktioniert. Ich finde das wirklich komisch - was verursacht diesen Fehler? Unabhängig davon, wenn ich den Ordner lösche und npm install erneut ausführe, funktioniert es. Zuvor wurde in diesem Unterverzeichnis nichts installiert. Jetzt wird alles dort installiert.
CtheGood

Danke @Moshen. Ich hatte eine alte Version von Node entfernt und eine Neuinstallation durchgeführt. Ich habe alle meine node_modules / global entfernt, aber vergessen, sie dann von einigen vorhandenen Apps zu entfernen. Ich musste den Ordner node_modules im Verzeichnis jeder vorhandenen App löschen und dann ausführen npm install.
Wilblack

Das gute alte "Haben Sie versucht, von Grund auf neu zu starten ?". Das hat bei mir super funktioniert.
Marco Aurélio Deleu

Es ist zwar schön zu wissen, dass es eine Problemumgehung gibt, aber dies riecht wirklich nach "Starten Sie Ihren Computer neu und versuchen Sie es erneut" und verbirgt nur das eigentliche Problem. Ich habe ein ähnliches Problem mit der NPM-Installation (der Prozess wird sofort ohne Meldung beendet). Eine der Problemumgehungen besteht darin, den Ordner node_modules zu löschen und neu zu installieren. Das erfüllt mich nicht mit der Zuversicht, dass wir verstehen, was hier vor sich geht.
Kelly S. French

1
Das hat bei mir funktioniert. Wenn ich noch einmal +1 für die IT-Crowd-Referenz könnte, würde ich.
Texelate

32

Ich benutze Windows-Maschine.

  1. Ich habe den Ordner node_modules gelöscht.
  2. Irgendwie wird die Datei package.lock.json erstellt. Ich habe diese Datei gelöscht.
  3. Dann npm installieren.
  4. Sauber bauen.
  5. Lauf.

14
Diese Antwort muss mehr Liebe bekommen. Die Datei package.lock.json hat mich verarscht.
Mwilcox

16

Wenn Sie diesen Code geerbt haben, sind möglicherweise die Abhängigkeiten und Versionen gesperrt und Sie haben eine ./npm-shrinkwrap.json-Datei.

Wenn Ihre Abhängigkeit nicht in dieser Datei aufgeführt ist, wird sie mit dem npm installBefehl niemals installiert .

Sie müssen die Pakete manuell installieren und dann ausführen npm shrinkwrap, um die Shrinkwrap-Datei zu aktualisieren.


2
Ich hatte ein Problem, bei dem bei der manuellen Installation eines Pakets package-lock.jsonnach dem Update auf Knoten 8.0.0 und npm 5.0.0 eine Datei erstellt wurde . Danach würde das Ausführen npm installimmer nur dieses eine Paket installieren, anstatt alle meine Abhängigkeiten. Das Löschen package-lock.jsonund erneute Ausführen npm installlöste das Problem für mich.
Monkpit

1
@Monkpit Das hat es auch für mich gelöst, danke! package-lock.jsonwar im Weg.
VirtualWolf

10

Ich vermute, Sie haben das Problem, dass sich Ihre package.jsonDatei nicht im selben Verzeichnis befindet wie Ihre Gruntfile.js. Wenn Sie Ihre grunt xxxBefehle ausführen, erhalten Sie eine Fehlermeldung wie:

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

Im Moment lautet die Lösung:

  • Erstellen Sie package.json im selben Verzeichnis wie Gruntfile.js
  • Definieren Sie die Module, die für Ihr Grunzprojekt erforderlich sind
  • Ausführen npm install, um sie lokal zu laden
  • Jetzt sollte der erforderliche Grunzbefehl funktionieren.

IMHO ist es traurig, dass wir keine Grunt-Auflösungsmodule haben können, die von einem übergeordneten npm-Modul geladen wurden (dh package.json in einem übergeordneten Verzeichnis innerhalb desselben Projekts). Die Diskussion hier scheint darauf hinzudeuten, dass dies getan wurde, um das Laden von "globalen" Modulen zu vermeiden, aber ich denke, wir wollen stattdessen von "meinem Projekt" -Modulen laden.


Dies ist also die Struktur meines übergeordneten Projekts (das das Submodulprojekt importiert): cl.ly/image/020E0b3I0t1A und die Struktur meines Submodulprojekts : cl.ly/image/2q0L3l1v0s40 ; Sie können sehen, dass beide auf derselben Ebene enthalten Gruntfile.jsund beide enthalten package.json.
Ahmed Nuaman

1
Dies ist kein Problem mit grunt, es ist ein Problem mit der npmnicht rekursiven Installation der Abhängigkeiten in meinem Submodulprojekt.
Ahmed Nuaman

9

OP kann für eine ältere Version des Knotens zutreffen. Dasselbe habe ich jedoch auch mit Knoten 4.4.1 gesehen.

Es kann sehr gut mit der von Ihnen verwendeten Knotenversion verknüpft sein. Versuchen Sie, auf eine neueste Version zu aktualisieren. Bestimmte Abhängigkeiten werden nicht transitiv geladen, wenn sie nicht mit der Knotenversion kompatibel sind.

Ich fand das durch Laufen npm update.

Nach dem Upgrade auf die neueste Version (4.4 -> 5.9); das wurde behoben.


8

In meinem Fall hat es geholfen, node_modulesund zu entfernen package-lock.json.

Danach installieren Sie einfach alles neu mit npm install.


8

Überprüfen Sie auch, ob Ihr Paketname korrekt akzeptiert wird:

FALSCH:

{
    "name":"My Awesome Package"
}


RICHTIG

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

1
Ja, ich hatte ein Leerzeichen im Namen und es wurde nicht richtig installiert.
Ansjovis86

1
Nicht nur für den Raum, es geht auch um das '-', das er im Namen verwendet hat. Ich habe auch das gleiche Problem, put - oder _ im Namen, es wird funktionieren.
Molagbal

4

Möglicherweise müssen Sie die grunt-cli installieren. Versuchen Sie dies, bevor Sie eine npm-Installation durchführen:

sudo npm install -g grunt-cli

Das behebt, dass das Grunzen für mich nicht beendet wird. Sie benötigen außerdem eine gültige Grunzdatei.

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


Was passiert, wenn Sie den Befehl 'grunzen' an Ihrer Eingabeaufforderung versuchen? Existiert es auf deinem Weg? Sie haben Recht, es sieht so aus, als ob es von Ihrem Pastebin installiert wurde. Hast du es mit sudo und -g installiert?
Poida

Es ist kein Problem mit Grunzen:~ ᐅ which grunt /opt/local/bin/grunt
Ahmed Nuaman

Auch wenn ich das Repo selbst klone und nicht über NPM und laufe npm installund grunt install, funktioniert es einwandfrei. Das Problem ist, dass NPM die package.json
Abhängigkeiten

In welchem ​​Verzeichnis suchen Sie nach den Paketabhängigkeiten? Sie sollten sich nicht auf der obersten Ebene befinden, sondern unter: Paket der obersten Ebene / Knotenmodule / Modulname / Knotenmodule. Könnte es sein, dass grunt die grunt-Datei nicht findet, weil sie im falschen Verzeichnis funktioniert?
Poida

Dies ist kein Problem grunt, wenn Sie Module mit NPM installieren, wird am Ende der bereits installierten Abhängigkeiten dieses Moduls normalerweise eine Sommerzeit angezeigt. Wenn ich das betreffende Modul installiere, erhalte ich keine Zusammenfassung der installierten Abhängigkeitsmodule.
Ahmed Nuaman

4

Nur für den Fall, dass jemand unter dieser Situation leidet und zufällig den gleichen Asanin-Fehler macht wie ich, ist dies in meinem Fall der Fall. Nachdem ich meinen Kopf eine Stunde lang gegen die Wand geschlagen hatte, stellte ich fest, dass mein JSON falsch verschachtelt war und sich der Schlüssel "Abhängigkeiten" im Schlüssel "Repository" befand.
Es ist unnötig zu erwähnen, dass keine Fehler erkennbar waren und keine Module installiert wurden.


3

Eine andere Möglichkeit, dies zu umgehen, besteht darin, dies in den package.jsonAbschnitt mit den Modulskripten aufzunehmen

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

Dadurch werden alle vom Modul benötigten Pakete installiert, und dieser Fehler wird nicht angezeigt.


3

passiert mit alter Knotenversion. Verwenden Sie die neueste Version des Knotens wie folgt:

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

Bearbeiten: Stellen Sie auch sicher, dass Sie save.
z.B:npm install yourmoduleName --save


2

Ich habe diesen Fehler erhalten, als ich eine saubere Node-Entwicklungsumgebung unter Windows installiert habe.

Um dies zu beheben, ging ich in mein neues Projektverzeichnis (mit dem ich gerade ein Gerüst erstellt habe yo angular) und gab zwei Befehle ein:

npm install -g grunt --save-dev

Dadurch werden die lokalen Grunzabhängigkeiten in Ihrem Projekt installiert. Nächster:

npm install

Dadurch wird sichergestellt, dass alle Ihre (neuen) Projektabhängigkeiten installiert sind.

Tada!


2

Erwähnenswert, um sicherzustellen, dass Ihre Abhängigkeiten in dem dependenciesTeil von Ihnen liegen package.json(im Gegensatz zu devDependencies).

Mein Problem war im Grunde das gleiche wie bei OP:

  • Installieren eines privaten Repos (nennen wir es repo1) über "module-name": "git+ssh://git@myserver:user/my-repo-name.git"in einem anderen Repo (nennen wir es repo2),
  • In repo2's node_moduleswar eine Paketabhängigkeit von repo1nicht vorhanden.
  • Mein dummer Fehler! .. repo1war, diese Abhängigkeit in devDependenciesstatt aufzulistendependencies
  • Bewegen Sie die Abhängigkeit in meinem repo1‚s package.jsonvon devDependencies bisdependencies
  • In meinem repo2entfernte ich meine node_modulesund package-lock.jsontat es npm install, eine voilà! ... Abhängigkeit war da!

Ich hatte die Variable NODE_ENV = Produktionsumgebung in meiner Docker-Datei über dem Befehl npm install deklariert, was dazu führt, dass devDependencies nicht installiert werden
Pieter De Clercq

0

Ich hatte das gleiche Problem. Aber auf demselben Computer hatte ein Projekt eine gute package.json, auf der alle meine Abhängigkeiten erfolgreich installiert wurden. Und in einem anderen Projekt wurden meine package.json-Abhängigkeiten nicht installiert, egal was ich tue. Ich habe gerade die package.json kopiert und in dieses andere Projekt eingefügt. Und es hat funktioniert! Der Unterschied, den ich gefunden habe, war nur eine leere Zeile am Anfang der Datei. Weiß nicht oder es beeinflusst irgendetwas, vielleicht ein anderes Problem. Das Problem war jedoch nur die Datei package.json.


0

Ich denke, dass ich auch mit diesem Problem konfrontiert war, und die beste Lösung, die ich gefunden habe, war, auf meine Konsole zu schauen und den Fehler herauszufinden, der ausgelöst wurde. Also habe ich es sorgfältig gelesen und festgestellt, dass das Problem darin bestand, dass ich mein Repo, meine Beschreibung und meinen gültigen Namen nicht in meinem angegeben habe package.json. Ich habe diese Informationen hinzugefügt und alles war in Ordnung.

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.