2012-08-26 4 views
25

Ich schrieb eine einfache Anwendung mit Knoten. Es kommt auf Express, Mongodb und Mungo (einfach) an. Also, habe ich eine Datei package.json und setzen diese in ihm genannt:Wie schreibe ich eine package.json Datei, so dass alle Abhängigkeiten mit "npm install" heruntergeladen werden

{ 
    "name": "booking-dojo", 
    "description": "Booking dojo app", 
    "version": "0.0.1", 
    "private": true, 
    "dependencies": { 
    "express": "3.x", 
    "mongodb": "*", 
    "mongoose": "*" 
    } 
} 

Ich lief dann npm install, npm die Module und ihre Abhängigkeiten zu installieren, zu erwarten. Das Ergebnis war enttäuschend:

[email protected] /home/merc/Synced/Development/Bookings/app/server 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └─┬ [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ └── [email protected] 
└─┬ [email protected] 
    ├── [email protected] 
    └── [email protected] 

ich damit bin verwirrt, wie ich dass express Bedürfnisse kennen jade (und vieles mehr) und mongoose Bedürfnisse mongodb.
Wenn ich in node_modules/jade gehen und laufen npm install, das Ergebnis aus dem Hauptbaum ist sehr unterschiedlich:

[email protected] /home/merc/Synced/Development/Bookings/app/server 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ └─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ └─┬ [email protected] 
│ └─┬ [email protected] 
│  ├── [email protected] 
│  ├── [email protected] 
│  ├── [email protected] 
│  └── [email protected] 
├─┬ [email protected] 
│ └── [email protected] 
└─┬ [email protected] 
    ├── [email protected] 
    └── [email protected] 

So express hat gewachsen viel. Es sieht aus wie npm install lädt nur einige der Abhängigkeiten der Untermodule.

Kann jemand bitte etwas Licht darauf werfen? Warum fehlen einige Abhängigkeiten? Mache ich etwas falsch? (wahrscheinlich)

Danke!

Merc.

Antwort

7

Die Antwort von Brandon in einem Kommentar zu einer anderen Antwort zur Verfügung gestellt wurde:

„Ein andere Sache ist zu beachten, dass, wenn ein Paket ist abhängig von einem Modul, das nach oben weiter in der Abhängigkeitskette gelöst werden kann, wird es für. Beispiel, da Sie mongodb in Ihrem Paket haben.json, muss Mongoose nicht sein eigenes mongodb installieren. - Brandon Tilley vor 2 Tagen

Danke Brandon! (Und das ist die Antwort ...)

38

Sie sind verwirrt über mindestens 2 Punkte.

Zuerst drückt nicht auf Jade abhängen, wie Sie durch das Lesen der node_modules/express/package.json Datei sehen:

"dependencies": { 
    "connect": "2.4.2", 
    "commander": "0.6.1", 
    "range-parser": "0.0.4", 
    "mkdirp": "0.3.3", 
    "cookie": "0.0.4", 
    "crc": "0.2.0", 
    "fresh": "0.1.0", 
    "methods": "0.0.1", 
    "send": "0.0.3", 
    "debug": "*" 
    } 

Express hat jedoch arbeiten mit Jade wenn es verfügbar ist, sowie viele andere Template-Engines. Also, um diese Liste Jade als eine Abhängigkeit in Ihrer package.json Datei zu beheben, und alles wird gut.

Zweitens installiert npm nur Knotenpakete, keine Drittanbieter-Dinge wie mongodb. Sie müssen mongodb und alle anderen Abhängigkeiten, die keine npm-Module sind, mit anderen Mitteln installieren (apt-get, yum, manuelle Installation, usw.).

So npm installiert Abhängigkeiten rekursiv, aber nur npm-Module.

+1

Eine andere Sache zu beachten ist, dass, wenn ein Paket auf einem Modul abhängt, die bis weiter in der Abhängigkeitskette gelöst werden kann, wird es. Zum Beispiel, da du 'mongodb' in deinem package.json hast, muss Mongoose nicht sein eigenes' mongodb' installieren. –

+0

Brandon, das * ist * die Antwort. Ich habe es gerade erst herausgefunden. Grundsätzlich wird MongoDb nicht unter Mongoose installiert, da es weiter oben aufgelöst wird. Da dies * die tatsächliche Antwort ist, kannst du sie bitte als richtige Antwort und nicht als Kommentar hinzufügen, damit ich sie akzeptieren kann? – Merc

+0

@Peter Guter Punkt, Anwendungen * generiert * per Express wird jedoch als Abhängigkeit BTW ausdrücken. Meine Frage, "warum fehlen einige Abhängigkeiten?", Hat die einfache Antwort (von Brandon): "Sie fehlen, weil sie weiter oben im Abhängigkeitsbaum aufgelöst sind". Vielen Dank! – Merc

4

Verwendung dieser Probe

{ 
 
    "name": "app", 
 
    "version": "0.0.1", 
 
    "main":"test.js", 
 
    "author":"Test", 
 
    "description": "For test ", 
 
    "dependencies": { 
 
    "express": "latest", 
 
    "mongoose": "latest" 
 
    } 
 

 
}

Verwandte Themen