2012-07-26 16 views
24

मैं थोड़ी देर के लिए ऑप्टिमाइज़र दस्तावेज़ों के माध्यम से पढ़ रहा हूं, लेकिन ऐसा लगता है कि मैं इसे समझ नहीं सकता। दस्तावेज़ कहते हैं:आवश्यकताएँ जेएस ऑप्टिमाइज़र में नेस्टेड आवश्यकता कॉल शामिल नहीं हैं

अनुकूलक केवल कि सरणियों स्ट्रिंग शाब्दिक की कि शीर्ष स्तर के लिए पारित कर रहे हैं में निर्दिष्ट मॉड्यूल गठबंधन होगा की आवश्यकता होती है और कॉल निर्धारित करें, या आवश्यकता होती है ('नाम') स्ट्रिंग शाब्दिक में कॉल एक सरलीकृत कॉमनजेएस रैपिंग। इसलिए, यह परिवर्तनीय नाम:

ठीक से अब तक बहुत अच्छा है। इसका मूल रूप से r.js शामिल नहीं होगा और न ही नेस्टेड निर्भरताओं को क्रॉल करेगा।

require([ 'es5shim', 'tools' ], function() { 
    console.log('fictive app entry point'); 

    require([ 'domready!' ], function(doc) { 
     console.log('domReady, loading GUI modules...'); 
     require([ 'GUI/window', 'GUI/header', 'GUI/content' ]); 
    }); 
}); 

मुझे लगता है कि समस्या यहाँ बहुत स्पष्ट हो जाता है: अब मान हम एक "मुख्य आवेदन" फाइल जो ऐसा दिखाई देता है की सुविधा देता है। r.js (ऑप्टिमाइज़र) उस फ़ाइल को केवल es5shim.js और tools.js से लिंक करके बनाता है। क्या ऑप्टिमाइज़र को बताने के लिए कोई अच्छा तरीका/कामकाज है, कि इसे इस उदाहरण में window.js, header.js और content.js फ़ाइलों को भी लिंक करना चाहिए?

बेशक domReady प्लगइन इस उदाहरण में लोड हो जाएगा और अंत में यह कॉलबैक निष्पादित करेगा, लेकिन संरचना स्वयं ही ऐसा लगता है, ऑप्टिमाइज़र को अपना काम करने से रोकता है।

प्रश्न हैं:

  • मैं बस में सभी मॉड्यूल की सूची हैं, तो "शीर्ष की आवश्यकता होती है कॉल", r.js भी शामिल होगा + लिंक नेस्टेड से सभी शीर्ष require और define कॉल और मुख्य-एप फ़ाइल में नेस्टेड-नेस्टेड मॉड्यूल?

  • वे उल्लेख कर रहे हैं r.js डॉक्स में के लिए विकल्प शामिल हैं। क्या यह यहां समझ में आता है और यदि हां, तो इसे ठीक से कैसे बुलाया जाए?

बेशक आप आलसी लोड मॉड्यूल के लिए विकल्प बाद में-ऑन खोना नहीं चाहते हैं, लेकिन निर्भरता के इस प्रकार के लिए (DOMContentLoaded के लिए इंतज़ार कर), मुझे आशा है कि वहाँ कि वैकल्पिक हल के लिए एक रास्ता है।

+0

मुझे समझ में नहीं आ रहा है: आप पहली जगह क्यों घोंसले की आवश्यकता है? क्यों न केवल GUI/विंडो es5shim पर निर्भर करते हैं, और es5shim domready पर निर्भर करते हैं! ? – machineghost

उत्तर

44

डिफ़ॉल्ट रूप से RequJS नेस्टेड आवश्यकता कॉल को स्कैन नहीं करता है क्योंकि ऐसा लगता है कि वे रनटाइम पर निर्भरता लोड करने के लिए हैं। आप

findNestedDependencies: true 

को अपने अनुकूलन कॉन्फ़िगरेशन में सेट करके इसे ओवरराइड करें। उम्मीद है की वो मदद करदे।

+0

बहुत अच्छा, धन्यवाद। – Eric

+5

यह जानना वास्तव में उपयोगी है, और विशेष रूप से RequJS दस्तावेज़ों में खोजने के लिए विशेष रूप से आसान नहीं है – hellosmithy

+0

धन्यवाद! यह व्यावहारिक रूप से मेरी समस्या हल हो गया है! –

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