2013-08-06 10 views
7

Meine package.json sieht so aus (Name/Beschreibung/etc. Weggelassen).npm Installation scheint nicht alle Abhängigkeiten zu bekommen

{ 
    "dependencies": { 
     "express": "3.3.4", 
     "jade": "0.34.x", 
     "mongoose": "3.6.x" 
    }, 
    "devDependencies": { 
     "vows": "0.7.x" 
    } 
} 

I verwendet express auf dem Repository und lief die automatisch generierten node app.js. Das hat funktioniert, aber als ich curl http://localhost:port verwendet habe, habe ich den Fehler "Kann Modul-Parser nicht finden." Ich lief npm install character-parser und dann bekam ich "Kann Modultransformatoren nicht finden." Dies geschah ein paar Mal, aber nachdem ich alle installiert hatte, begann die App zu arbeiten.

Ich dachte, dass npm install sollte Abhängigkeiten rekursiv installieren. Das beunruhigt mich auch, weil ich offensichtlich möchte, dass die package.json verwendbar ist, wenn die App bereitgestellt wird.

+0

Aber npm installiert rekursiv. Gibt es nach dem Ausführen von 'npm install' irgendwelche Fehler? Bitte poste sie wenn ja. – gustavohenke

+0

@gustavohenke keine Fehler, leider. Es sagt alles ist in Ordnung, aber dann, wenn ich versuche, Knoten zu laufen, bekomme ich den fehlenden Modulfehler, bis ich 'npm install ' verwende. Muss ich 'sudo npm' vielleicht benutzen? –

+1

Haben Sie npm-shrinkwrap.json? Wenn Sie dies tun, überprüfen Sie, ob die erforderlichen Module aufgelistet sind. – Fluffy

Antwort

-1

Wenn Sie npm install <name-of-package> ausführen, wird das Paket in Ihrem Ordner node_modules installiert, aber es wird nicht als Abhängigkeit hinzugefügt. Um das Paket und speichern Sie es als eine Abhängigkeit in Ihrem package.json zu installieren, müssen Sie die --save Flagge wie so verwenden:

npm install <name-of-package> --save

Die npm documentation liefert weitere Informationen über zusätzliche Flags, die wie die --save-dev verwendet werden können, Flag zum Speichern von Entwicklungsabhängigkeiten und das --save-optional Flag zum Speichern von optionalen Abhängigkeiten zu Ihrem package.json.

2

Hier ist ein einfaches Skript, um die Abhängigkeiten in ./node_modules zu sammeln:

var fs = require("fs"); 

function main() { 
    fs.readdir("./node_modules", function (err, dirs) { 
    if (err) { 
     console.log(err); 
     return; 
    } 
    dirs.forEach(function(dir){ 
     if (dir.indexOf(".") !== 0) { 
     var packageJsonFile = "./node_modules/" + dir + "/package.json"; 
     if (fs.existsSync(packageJsonFile)) { 
      fs.readFile(packageJsonFile, function (err, data) { 
      if (err) { 
       console.log(err); 
      } 
      else { 
       var json = JSON.parse(data); 
       console.log('"'+json.name+'": "' + json.version + '",'); 
      } 
      }); 
     } 
     } 
    }); 

    }); 
} 

Für ein Projekt arbeite ich, sieht die Ausgabe wie folgt aus:

"progress": "0.1.0", 
"request": "2.11.4", 

Wenn Sie sich erinnern Entfernen Sie das Komma vom letzten Eintrag, Sie können die Ausgabe kopieren und einfügen.

1

bekam ich genau diesen Fehler, während ich npm für https://github.com/HenrikJoreteg/humanjs-sample-app/ Installation wurde

ich auf einem Windows-Rechner bin, so dass ich den Verdacht, dass es ein Problem mit den ungeraden Einschränkungen war, die Windows in einem auf die Anzahl der Zeichen hat Dateipfad.

Ich löste dies, indem ich meinen Basispfad zu einem dreistelligen Ordnernamen in meinem Stamm (in diesem Fall von C: \ projects \ humanjs-sample-app nach C: \ hjs) kurzgeschlossen. Als ich npm neu installiert habe, hat alles funktioniert. Ich bin nicht glücklich mit dieser Entschließung. Ich sollte mir keine Sorgen machen müssen, dass mein Name für den Basispfad zu lang ist. Dies ist einer der Gründe dafür, dass Leute auf Windows-Rechnern oft keine Knoten entwickeln.

Eine alternative Auflösung ist auf Linux oder Mac zu entwickeln, wenn Sie nicht bereits sind. Das ist wahrscheinlich meine langfristige Strategie.

+0

Ich habe gerade bemerkt, dass Sie ein Ubuntu-Tag auf Ihrer Frage haben, also ist dies möglicherweise nicht Ihr Problem. Ich werde dies jedoch nicht löschen, nur für den Fall. – PureCognition

Verwandte Themen