2012-08-26 5 views
25

Napisałem prostą aplikację za pomocą węzła. Zależy od ekspresu, mongody i mangusty (łatwe). Więc stworzyłem plik o nazwie package.json i umieścić to w nim:Jak napisać plik package.json, aby wszystkie zależności były pobierane za pomocą "npm install"

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

I pobiegł npm install, oczekując npm zainstalować te moduły i ich zależności. Wynik był rozczarowujący:

[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]3 
    ├── [email protected] 
    └── [email protected] 

jestem zdezorientowany tym, jak wiem że express potrzeb jade (i wiele innych) oraz mongoose potrzeb mongodb.
Jeśli pójdę do node_modules/jade i uruchomić npm install, wynik z głównego drzewa jest bardzo różny:

[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] 

Więc express ma uprawianych dużo. Wygląda na to, że npm install ładuje tylko niektóre z zależności pod-modułów.

Czy ktoś może rzucić trochę światła na to? Dlaczego brakuje niektórych zależności? czy robię coś źle? (prawdopodobnie)

Dzięki!

Merc.

Odpowiedz

7

Odpowiedź została dostarczona przez Brandon w komentarzu do innej odpowiedzi:

„Inną rzeczą, aby pamiętać, że jeśli pakiet zależy od modułu, który może być rozwiązany dalej w łańcuchu zależności, będziemy go. na przykład, ponieważ masz mongody w swoim pakiecie.json, Mongoose nie musi instalować własnego mongodb - Brandon Tilley 2 dni temu

Dziękuję Brandon! (I to jest odpowiedź ...)

38

Jesteś zdezorientowany co najmniej 2 punktami.

Najpierw wyrazić nie zależy jade, jak widać po przeczytaniu pliku node_modules/express/package.json:

"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": "*" 
    } 

ekspresowe jednak, pracować z jade jeśli jest ona dostępna, a także wiele innych silników szablonów. Aby naprawić tę listę jade jako zależność w pliku package.json, wszystko będzie w porządku.

Po drugie, npm instaluje tylko pakiety węzłów, nie takie jak mongodb. Musisz zainstalować mongodb i wszelkie inne zależności, które nie są modułami npm przy użyciu innych metod (apt-get, yum, ręczna instalacja, itp.).

Więc npm instaluje zależności rekursywnie, ale tylko moduły npm.

+1

Inną rzeczą, aby pamiętać, że jeśli pakiet zależy od modułu, który może być rozwiązany dalej w łańcuchu zależności, to będzie. Na przykład, ponieważ masz 'mongodb' w twoim package.json, Mongoose nie musi instalować własnego' mongodb'. –

+0

Brandon, to * jest * odpowiedź. Pojąłem to niedawno. Zasadniczo nie instaluje MongoDb w Mongoose, ponieważ jest on dalej rozwiązywany. Ponieważ to * jest * rzeczywistą odpowiedzią, czy możesz dodać ją jako właściwą odpowiedź, a nie jako komentarz, aby ją zaakceptować? – Merc

+0

@Peter Dobry punkt, aplikacje * generowane * przez ekspresowe będą jednak wyrażać jako zależność BTW. Moje pytanie "dlaczego niektóre zależności brakuje?", Ma prostą odpowiedź (dostarczoną przez Brandona) "Brakuje ich, ponieważ są one dalej rozwiązywane w drzewie zależności". Dzięki! – Merc

4

użycie ta próbka

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

 
}

Powiązane problemy