2013-08-19 7 views
14

मैं एकाधिक मॉड्यूल को एक फ़ाइल में मर्ज करना चाहता हूं, लेकिन मुझे इसे कैसे करना है इसके बारे में कोई आधिकारिक दस्तावेज़ नहीं मिल रहा है। अब मैं नीचे दी गई विधि का उपयोग कर रहा हूं, यह काम करता है, लेकिन मैं निम्नलिखित के बारे में सोच रहा हूं:एक फ़ाइल में RequJS एकाधिक मॉड्यूल

  • क्या यह तकनीकी रूप से सही है?
  • आवश्यकता जेएस जांचता है कि कोई मॉड्यूल लोड हो गया है या नहीं? मॉड्यूल नाम या फ़ाइल नाम का उपयोग कर?
  • क्या यह समाधान कुछ स्थितियों में कई बार मॉड्यूल को निष्क्रिय करेगा?

index.html

<script src="require.js"></script> 
<script> 
requirejs.config({ 
    paths: { 
     'a': 'test', 
     'b': 'test' 
    } 
}); 

require(['a', 'b'], function() { 
    console.log('a & b loaded'); 
}); 
</script> 

test.js

console.log('loading test.js'); 
// I have some init here, like "Avoid `console` errors in IE" 

define('a', function() { 
    console.log('a module'); 
}); 

define('b', function() { 
    console.log('b module'); 
}); 

उत्तर

0

यह सही है?

नहीं। डिस्क पर प्रति फ़ाइल केवल एक मॉड्यूल परिभाषा होनी चाहिए।

RequJS लोड मॉड्यूल को कैसे जांचता है या नहीं? मॉड्यूल नाम या फ़ाइल नाम का उपयोग कर?

फ़ाइल नाम का उपयोग करना।

क्या कुछ स्थितियों में कई बार init होगा?

मॉड्यूल को ऑप्टिमाइज़ेशन टूल द्वारा अनुकूलित बंडलों में समूहीकृत किया जा सकता है। नमस्ते विश्व मॉड्यूल के

http://requirejs.org/docs/optimization.html

उदाहरण यहाँ दिया जाता है।

http://mydons.com/requirejs-hello-world/

+0

धन्यवाद, लेकिन मैं PHP टेम्पलेट का उपयोग कर रहा हूं, जिसमें कुछ घोंसले वाला जेएस कॉल है, इसलिए मेरे लिए मुश्किल लग रहा है, वैसे भी, मैं –

+2

को वोट देता हूं केवल प्रति फ़ाइल एक मॉड्यूल डीफ़ की सिफारिश की जाती है लेकिन इसमें 2 नहीं होते हैं या अधिक हमेशा गलत। इस उत्तर पर "नहीं" मेरे लिए बहुत अनुवादात्मक प्रतीत होता है। मुझे लगता है कि एलेक्सकोड पैसे पर है। अधिकांश चीजों की तरह, कुंजी यह समझना है कि प्रति मॉड्यूल की सलाह क्यों दी जाती है - मेरा मानना ​​है कि यह r.js, optimiser के प्रभावी उपयोग की अनुमति देना है। हमारे पास r.js का उपयोग न करने के कारण हैं क्योंकि हमारी अपनी अनुकूलन रणनीति है। प्रति फ़ाइल एकाधिक मॉड्यूल लोड हो रहा है (हमारे मामले में, एक फ्लाई सर्वर-साइड बनाया गया है और फिर एक अजाक्स अनुरोध से दिया गया है) हमारे कस्टम अनुकूलन का हिस्सा है। इसका "खरीदार सावधान रहें"। –

+1

हाँ, निश्चित रूप से, मुझे मिलियन फाइलों की तरह होना होगा जिनमें प्रत्येक व्युत्पन्न मॉड्यूल की 10 लाइनें होंगी। मैंने सोचा कि RequJS ने प्रभावशीलता का वादा किया है ... –

8

यह पुरानी है, लेकिन मैं सिर्फ यह टकरा। निश्चित रूप से आप एक ही फ़ाइल में एकाधिक परिभाषित कर सकते हैं, और हाँ, यह समझ में आता है।

केवल एक चीज जो आपको करने की ज़रूरत है वह परिभाषित परिभाषाओं का उपयोग करना है।

define('module1', ['dependency1', 'dependency2'], function (d1, d2) { 
    // your code here 
} 

सोचो कि कभी कभी आप गतिशील रूप से लोड करने के लिए अपने संसाधनों की जरूरत नहीं है, उन्हें लोड शुरुआत में सब वास्तव में आवश्यकता हो सकती है हो रही सह एक भी concatenated/न्यूनतम किया गया js पैकेजिंग समय में फ़ाइल बनाने सबसे अच्छा समाधान है ।

तो आप "आलसी लोडिंग" का लाभ नहीं उठाएंगे, लेकिन आप अभी भी RequjS का उपयोग कर अपने ऐप को मॉड्यूलर तरीके से डिज़ाइन करेंगे।

+1

लेकिन इस फ़ाइल को कैसे लोड किया जाए? –

8

शांगन सही है। http://requirejs.org/docs/api.html#define में एक हिस्सा है जो कहता है:

डिस्क पर प्रति फ़ाइल केवल एक मॉड्यूल परिभाषा होनी चाहिए।यह आधिकारिक दस्तावेज से है: http://requirejs.org/docs/api.html#config-bundles

इसे कहते हैं आप जिसमें आप जो bundles संपत्ति द्वारा मॉड्यूल पा सकते हैं फ़ाइल परिभाषित कर सकते हैं कि

लेकिन अगर आप यह करना चाहते हैं वैसे भी मैं ऐसा ही कुछ मिल गया। उदाहरण के लिए: मैं फ़ाइल modules.js कहा जाता है इस तरह की सामग्री के साथ:

define('module_one', function(){ 
    return 'Hello. I am module one'; 
}) 

define('module_two', function(){ 
    return 'Hello. I am module two'; 
}) 
तब मेरे main.js में

फ़ाइल मैं कुछ इस तरह करते हैं:

requirejs.config({ 
    baseUrl : 'modules/', 
    bundles: { 
     'modules': ['module_one', 'module_two'] 
    } 
}) 

require(['module_one', 'module_two'], function(moduleOne, moduleTwo){ 
    alert(moduleOne); 
    alert(moduleTwo); 
}) 

और यह की तरह काम करता में चाहता हूं।

+0

चूंकि आपने पहले से ही एक बंडल "मॉड्यूल" परिभाषित किया है, क्या आपको सीधे उस बंडल की आवश्यकता हो सकती है? 'की आवश्यकता है ([' बंडल 1 ']); '? – benjaminz

+0

आपका मतलब कुछ है: 'की आवश्यकता है ([' मॉड्यूल '])'? यह काम नहीं करेगा, क्योंकि _modules_ फ़ाइल का नाम है, और '['module_one']' इस फ़ाइल में एक मॉड्यूल नाम है। इस तरह मैं इसे समझता हूं, लेकिन मैं गलत हो सकता हूं। – Prusdrum

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