2012-08-26 22 views
25

मैंने नोड का उपयोग करके एक साधारण एप्लिकेशन लिखा था। यह एक्सप्रेस, mongodb और mongoose (आसान) पर निर्भर करता है। तो, मैं एक फ़ाइल package.json बुलाया बनाया है और वह में रखते:पैकेज.जेसन फ़ाइल कैसे लिखें ताकि सभी निर्भरताओं को "एनपीएम इंस्टॉल" के साथ डाउनलोड किया जा सके

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

मैं तो npm install भाग गया, NPM की उम्मीद कर उन मॉड्यूल और उनकी निर्भरता स्थापित करने के लिए। परिणाम निराशाजनक था:

[email protected] /home/merc/Synced/Development/Bookings/app/server 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected]2.4.3 
│ │ ├── [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] 

मैं, इस से उलझन में हूँ के रूप में मैं कि express जरूरतों jade (और भी बहुत कुछ), और mongoose जरूरतों mongodb पता है।
अगर मैं node_modules/jade में जाकर npm install चलाने के लिए, मुख्य पेड़ से परिणाम बहुत अलग है:

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

तो, expressहो गई एक बहुत है। ऐसा लगता है कि npm install उप-मॉड्यूल की निर्भरताओं के केवल कुछ लोड हो रहा है।

क्या कोई इस पर कुछ प्रकाश डाल सकता है? कुछ निर्भरताओं क्यों गुम हैं? क्या मुझसे कुछ गलत हो रही है? (संभावना)

धन्यवाद!

Merc।

उत्तर

7

जवाब एक और जवाब देने के लिए एक टिप्पणी में ब्रैंडन द्वारा प्रदान किया गया:

"नोट करने के लिए एक और बात यह है कि एक पैकेज एक मॉड्यूल निर्भरता श्रृंखला में आगे सुलझाया जा सकता है, यह के लिए पर निर्भर करता है। उदाहरण के लिए, चूंकि आपके पास आपके पैकेज.ऑसन में मोंगोडब है, मोंगोस को अपना खुद का मोंगोड स्थापित करने की आवश्यकता नहीं है। - ब्रैंडन टिली 2 दिन पहले

धन्यवाद ब्रैंडन! (और यह जवाब है ...)

38

आप कम से कम 2 अंक के बारे में उलझन में हैं।

पहले, व्यक्त जेड पर निर्भर नहीं करता, जैसा कि आप 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": "*" 
    } 

एक्सप्रेस, तथापि, जेड के साथ काम करता है, तो यह उपलब्ध है, साथ ही कई अन्य टेम्पलेट इंजन। तो इस सूची जेड को अपने पैकेज.जेसन फ़ाइल में निर्भरता के रूप में ठीक करने के लिए और आप ठीक होंगे।

दूसरा, एनपीएम केवल नोड पैकेज स्थापित करता है, न कि तीसरे पक्ष की चीजें जैसे mongodb। आपको mongodb और किसी अन्य निर्भरता को स्थापित करने की आवश्यकता है जो अन्य माध्यमों (apt-get, yum, मैन्युअल इंस्टॉल इत्यादि) का उपयोग करके एनपीएम मॉड्यूल नहीं हैं।

तो एनपीएम निरंतर निर्भरता स्थापित करता है, लेकिन केवल एनपीएम मॉड्यूल।

+1

नोट करने के लिए एक और बात यह है कि अगर एक पैकेज एक मॉड्यूल निर्भरता श्रृंखला में आगे सुलझाया जा सकता है पर निर्भर करता है, यह है। उदाहरण के लिए, चूंकि आपके पास अपने पैकेज में 'mongodb' है। Json, Mongoose को अपने' mongodb' को स्थापित करने की आवश्यकता नहीं है। –

+0

ब्रैंडन, यह * उत्तर * है। मैंने बस इसे बहुत पहले नहीं सोचा था। असल में, यह MongoDb के तहत MongoDb स्थापित नहीं करता है क्योंकि यह आगे हल हो गया है। चूंकि यह * वास्तविक उत्तर है, क्या आप टिप्पणी के बजाए इसे उचित उत्तर के रूप में जोड़ सकते हैं, ताकि मैं इसे स्वीकार कर सकूं? – Merc

+0

@ पीटर अच्छा बिंदु, एक्सप्रेस द्वारा * जेनरेट * उत्पन्न * हालांकि एक निर्भरता बीटीडब्ल्यू के रूप में व्यक्त किया जाएगा। मेरा सवाल है, "कुछ निर्भरता क्यों गुम हैं?", सरल जवाब है (ब्रैंडन द्वारा प्रदान किया गया) "वे गायब हैं क्योंकि वे निर्भरता पेड़ में आगे बढ़े हैं"। धन्यवाद! – Merc

4

उपयोग इस नमूने

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

 
}

संबंधित मुद्दे