2012-03-16 28 views
26

में किसी अन्य निर्भरता की निर्भरता की आवश्यकता है मेरे पास एक साधारण नोड ऐप है जिसमें जिथब पर किसी अन्य ऐप पर एकल निर्भरता है। निर्भरता npm install के साथ ठीक है, लेकिन जब मैं वहां स्थापित कुछ की आवश्यकता का प्रयास करता हूं, तो यह कहता है कि यह उपलब्ध नहीं है। उदाहरण के लिए, जिथब ऐप मोंगोस को निर्भरता के रूप में स्थापित करता है। मैंने सोचा था कि यह माता पिता एप्लिकेशन कि मॉड्यूल का उपयोग करने में सक्षम होगा, क्योंकि यह एक बच्चे में है:नोड मॉड्यूल

/app 
    /node_modules 
    /github_dependency [parent module] 
     /node_modules 
     /mongoose [child module] 

मैं सिर्फ एक के रूप में नेवला शामिल करने के लिए है:

var mongoose = require('mongoose') 

संरचना इस तरह दिखता है निर्भरता के साथ-साथ अभिभावक ऐप में या क्या उस मॉड्यूल तक बच्चे के माध्यम से पहुंच प्राप्त करने का कोई तरीका है?

उत्तर

30

क्या मुझे सिर्फ माता-पिता को निर्भरता के रूप में मोंटोज़ को शामिल करना होगा या क्या उस मॉड्यूल तक बच्चे के माध्यम से पहुंच प्राप्त करने का कोई तरीका है?

आप उदा करने के लिए हालांकि यह संभव है require('github/node_modules/mongoose'), मानक अभ्यास आपकी सभी निर्भरताओं को स्पष्ट रूप से स्थापित करना है (यानी, आपको अपने ऐप की निर्भरता के रूप में मोंगोस को शामिल करना चाहिए) और require('mongoose')

+1

धन्यवाद, हम इस सम्मेलन का पालन करेंगे। एक बात जिसे मैं उल्लेख करना चाहता था, क्या यह सैद्धांतिक रूप से परियोजना में एकाधिक, डुप्लिकेट निर्भरताओं का परिणाम हो सकता है? –

+0

यह हो सकता है, और आपके पास आमतौर पर नोड प्रोजेक्ट में कई अलग-अलग मॉड्यूल (और उसके संस्करण) के कई उदाहरण होंगे। यह एनपीएम आईएमओ की ताकत में से एक है, जिसने विभिन्न जावा कंटेनर के वर्ग लोडर में 0000 काम करने वाले कंकों का एक बड़ा हिस्सा बिताया है ... –

+4

इस तकनीक का उपयोग करने के लिए बहुत अच्छा कारण है। यदि आपको ('github/node_modules/mongoose') की आवश्यकता होती है, तो आप mongoose का एक ही उदाहरण उपयोग कर रहे हैं जो github उपयोग कर रहा है, इसलिए आप इसे कनेक्शन पूल साझा करते हैं। यह तकनीक यह सुनिश्चित करने के लिए भी उपयोगी है कि आप एक ही संस्करण का उपयोग कर रहे हैं। –

2

एक और अधिक मजबूत मामला है, जो इस तरह के परीक्षण के रूप में स्थितियों में अच्छा है के लिए आप निम्न फ़ंक्शन का उपयोग कर सकते हैं:

var Module = require('module'); 
var path = require('path'); 

function requireFrom(self, parent, name) { 
    var pPath = Module._resolveFilename(parent, self); 
    var m = new Module(pPath, module); 
    m.filename = pPath; 
    m.paths = Module._nodeModulePaths(path.dirname(pPath)); 
    return m.require(name); 
} 

जो इस्तेमाल किया जा सकता के रूप में इस प्रकार है

requireFrom(module, 'github_dependency', 'mongoose') 
संबंधित मुद्दे