2013-02-15 61 views
6

मैंने आवश्यकता वाले संदर्भों का उपयोग करना शुरू कर दिया है जो एक बड़े एकल पृष्ठ एप्लिकेशन को विभाजित करने के तरीके के रूप में है जो अकेले व्यक्तिगत स्टैंड से बना है एसपीए जिनके पास निर्भरता का अपना सेट है।एकाधिक requjs संदर्भों के बीच सामान्य निर्भरताओं को संभालने के लिए एक अभ्यास?

जेम्स बर्क समस्या यह है कि मैं अब कई संदर्भों और उनके सामान्य निर्भरता साझा नहीं किया जा रहा है के बारे में GitHub पर इस टिप्पणी में सामना कर रहा हूँ, https://github.com/aurajs/aura/pull/170#issuecomment-10973485

मैं कैसे डुप्लिकेट अनुरोध पैदा करने के बिना विभिन्न requirejs संदर्भों के बीच आम निर्भरता को साझा करते हैं का वर्णन करता है एक ही फाइल के लिए?

+0

मैं एक ही समस्या है ... मैं थोड़े आम मॉड्यूल के लिए संदर्भ इंजेक्शन जब मैं प्रत्येक अनुप्रयोग को प्रारंभ से इसे हल, लेकिन यह अच्छा होगा अगर हम किसी अन्य संदर्भ से अन्य संदर्भों को प्राप्त कर सकें – chchrist

+1

संदर्भों को प्रबंधित करने के लिए requ.js प्लगइन लिखकर हल किया जा सकता है, प्लगइन यह निर्धारित कर सकता है कि एकाधिक संदर्भ से बचने के लिए वैश्विक संदर्भ से निर्भरता को खींचा जा सकता है या नहीं एक ही निर्भरता के लिए अनुरोध। इस तारीख के लिए कोई जवाब नहीं है क्योंकि कोई खुले सोर्स किए गए समाधान नहीं हैं। Http://requirejs.org/docs/plugins.html –

+1

ब्राउज़र का उपयोग करें: https://github.com/substack/node-browserify/ – avetisk

उत्तर

0

आप बड़े बहु मॉड्यूल जेएस ऐप्स को पैक करने के लिए browserify पर देखना चाहेंगे।

1

मुझे आपके द्वारा वर्णित एक ही समस्या का सामना करना पड़ा। मैंने एक प्लगइन लिखा है जो नेस्टेड संदर्भों के बीच सामान्य निर्भरताओं को साझा करने का ख्याल रखता है।

requirejs.s.contexts

{ 
    _: { 
    defined: { 
     commondep: {}, 
     main: undefined 
    } 
    } 
    plugin: { 
    defined: { 
     commondep: {}, 
     plugin: {} 
    } 
    } 
} 

_ संदर्भ मुख्य संदर्भ है:

Requirejs एक नक्शा जो सभी संदर्भों में शामिल है और यह निर्भरता परिभाषित किया है। हम सभी वैश्विक मॉड्यूल परिभाषाओं को निर्धारित करने के लिए इस संदर्भ का उपयोग कर सकते हैं। साझा निर्भरताओं को प्लगइन स्क्रिप्ट को प्री-लोड करके और निर्भरताओं की तुलना वैश्विक निर्भरताओं से की जा सकती है। साझा मॉड्यूल सैंडबॉक्स संदर्भ में इंजेक्ट किया जा सकता है:

function injectDependency(dependencyName, contextName) { 
    var ctx = getContext(contextName); 
    var dependencyInstance = require(dependencyName); 

    ctx.defQueue.push([ dependencyName, [], function() { return dependencyInstance; }]); 
} 

function getContext(contextName) { 
    return requirejs.s.contexts[contextName]; 
} 

इस स्निपेट हम फोन में एक गैर async रास्ता मॉड्यूल के वैश्विक उदाहरण प्राप्त करने के लिए आवश्यकता होती है। मॉड्यूल को परिभाषा कतार पर दबाकर सैंडबॉक्स में इंजेक्शन दिया जाता है।

प्लगइन लोडर के इस समाधान का कार्यान्वयन https://github.com/igsp/requireplug से डाउनलोड किया जा सकता है।

मैं अपने ब्लॉग पर इस समाधान का यांत्रिकी के एक अधिक विस्तृत विवरण पोस्ट: https://intergalacticspacepocket.wordpress.com/2014/08/07/nesting-requirejs-contexts-with-shared-dependencies/