2013-08-30 9 views
24

आवश्यकताजेएस के बीच अंतर, आवश्यकता() बनाम परिभाषित() के बीच मूल अंतर क्या है;RequJS: आवश्यकता() और परिभाषित()

require(['a'], function(a) { 
    // some code 
}); 

// A.js 
define(['b','c','d','e'], function() { 
    //some code 
}); 

किसी भी उपयोग के मामलों बहुत मददगार होगा ..

+0

देखें http://stackoverflow.com/questions/9507606/when-to-use-require-and-when-to-use-define –

+1

यह _is_ डुप्लिकेट है लेकिन यहां स्पष्टीकरण उदाहरण के संदर्भ में दिया जाना चाहिए । –

उत्तर

40

एक कोर अंतर यह है कि मुझे जल्दी उपयोग में नाराज पता लगाना था कि एक define कभी नहीं कहा जा सकता है।

जब तक प्रति फ़ाइल केवल define है, तो वह उस मॉड्यूल को उस फ़ाइल नाम के तहत पंजीकृत करेगा। हालांकि, define मॉड्यूल केवल require फ़ंक्शन में से प्रत्येक के लिए पूछे जाने पर लोड हो जाते हैं।

परिभाषित करें: यदि आपको XXX की आवश्यकता है, तो पहले इन अन्य चीजों को लोड करें, फिर इस फ़ंक्शन का परिणाम वापस करें।

आवश्यक: इन अन्य चीजों को लोड करें, फिर इस फ़ंक्शन को चलाएं। (कोई "अगर")

उदाहरण:

// this is in company/welcomepage.js 
define(['company/ui_library'], 
    function(uiLib) { 
     console.log('Welcome to {company}!'); 
    } 
); 

हैं कि केवल जावास्क्रिप्ट फ़ाइल है, तो आप अपने पृष्ठ को खोलने सकता है, और कुछ नहीं होगा: मान लीजिए कि आप इस अपने पेज में फ़ाइल जेएस शामिल करते हैं कंसोल लॉग में, स्क्रिप्ट के बावजूद यह उपयोगकर्ता का स्वागत करने के लिए कह रहा है। हालांकि, उस पेज में अगर कहीं बदलता है या किसी अन्य लिपि में, आपको निम्न सम्मिलित करें:

require(['company/welcomepage'], function() { 
    // optionally insert some other page-initialization logic here 
}); 

अब, पेज कंसोल में एक स्वागत संदेश डाल देंगे जब यह लोड करता है।

असल में, उस दूसरे स्थान पर, मैन्युअल रूप से की आवश्यकता नहीं होगी <script> टैग के रूप में welcomepage.js शामिल करें; जैसे ही यह आवश्यकता को देखता है, यह इसे अपने स्थान से लोड करेगा, और इसे समझने की आवश्यकता है।

+1

आपके उत्तर के लिए Thx ... क्या आप कृपया एक मूल उदाहरण के साथ विस्तृत कर सकते हैं ... – testndtv

+1

@ कटाना 314 ... क्या आप विस्तृत कर सकते हैं ... – testndtv

+1

@testndtv एक उदाहरण जोड़ा गया; आशा करता हूँ की ये काम करेगा। – Katana314

1

मेरा मानना ​​है कि आप हमेशा अपनी मॉड्यूल परिभाषाओं के लिए परिभाषित करते हैं। ऐसा करने के लिए आपके पास कई स्वाद हैं, आप एक मॉड्यूल को परिभाषित करने के पहले तर्क के रूप में एक सरणी में अपनी निर्भरताओं के साथ परिभाषित कर सकते हैं (जैसा कि आपने पोस्ट किया है)।

या आप Simplified CommonJS wrapper उपयोग कर सकते हैं, कुछ इस तरह:)

define(function (require) { 
    var otherModule = require('otherModule'); 
    return function() { 
     return otherModule.operation(); 
    }; 
}); 

शायद तुम JSONP service dependency प्रारूप, की आवश्यकता पड़ती है जो के साथ मिश्रित किया गया() सेवा लोड, और फिर परिभाषित करते हैं (निर्दिष्ट करने के लिए के रूप में जेएसओएनपी कॉलबैक जो अंततः सेवा जवाब देने के बाद मॉड्यूल को परिभाषित करेगा।

तो अंत में, आप मॉड्यूल को परिभाषित करने के लिए परिभाषित() का उपयोग करते हैं, और उन्हें लोड करने के लिए() की आवश्यकता होती है।

10

require और requirejs समान हैं।

require === requirejs // true 

require एक मॉड्यूल जो परिभाषित किया गया है लोड करने के लिए एक तरीका है।उदाहरण logger मॉड्यूल लोड करने के लिए के लिए मैं कर सकता है:

require(["logger"], function(logger){ 
    logger.bla("S"); 
}); 

यहाँ मैं require बोल रहा हूँ, एक पहले से ही परिभाषित मॉड्यूल logger कहा जाता है निर्दिष्ट करने और उसके bla विधि को फोन करके इसे का उपयोग।

define मॉड्यूल को परिभाषित करने का एक तरीका है। उदाहरण के एक logger मॉड्यूल को परिभाषित करने के लिए मैं कर सकता है:

// logger.js 
define(function(){ 
    return { 
    bla: function(x){ 
     alert(x); 
    } 
    } 
}); 

यहाँ मैं define कहा जाता है और logger मॉड्यूल में परिभाषित किया। इस मॉड्यूल में मैंने bla फ़ंक्शन लौटाया जिसे मैं बेनकाब करना चाहता हूं।

कभी-कभी निर्यात को निर्यात के समान दिखता है क्योंकि परिभाषित भी अन्य मॉड्यूल का उपयोग कर सकते हैं जैसे अन्य मॉड्यूल का उपयोग कर सकते हैं। मुझे आप एक ही logger मॉड्यूल, इस बार एक मॉड्यूल

// logger.js 
define(["popup"], function(popup){ 
    return { 
    bla: function(x){ 
     popup.show(x); 
    } 
    } 
}); 

यहाँ लकड़हारा मॉड्यूल मैं defined का उपयोग कर दिखाने दें, यह भी एक निर्भरता popup कहा जाता है और इस तरह यह require तरह दिखता है।

-2

की आवश्यकता होती है() और परिभाषित() दोनों dependencies.There लोड करने के लिए प्रयोग किया जाता है इन दो विधि के बीच एक बड़ा अंतर है।

इसका बहुत सरल दोस्तों

आवश्यकता होती है(): विधि तत्काल कार्यक्षमताओं को चलाने के लिए प्रयोग किया जाता है। परिभाषित(): विधि का उपयोग एकाधिक स्थानों (पुन: उपयोग) में उपयोग के लिए मॉड्यूल को परिभाषित करने के लिए किया जाता है।

-1

परिभाषित है कि हम कैसे एएमडी मॉड्यूल प्रारूप के अनुसार, एक मॉड्यूल की घोषणा (वहाँ CommonJS, ES2015, जैसे अन्य उपलब्ध मॉड्यूल प्रारूपों System.register, UMD कर रहे हैं)

जबकि ..

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

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