2013-03-31 4 views
7

पर निर्भर नहीं है मैं jQuery प्लगइन लिख रहा हूं जिसमें बहुत सारे कोड हैं। इसलिए मैंने कोड को अलग करने और इसे मेरे लिए अधिक मॉड्यूलर (डेवलपर) बनाने का फैसला किया। इसके लिए मैं requ.js का उपयोग करता हूं।requjs - कई फ़ाइलों को एकल जेएस फ़ाइल में संयोजित करें जो requjs

  1. utils.js
  2. आधार row.jas
  3. एक-row.js
  4. बी row.js
  5. मेरी-table.js:
    अब मैं 6 js फ़ाइलें
  6. main.js

फ़ाइलें 1 से 5 को परिभाषित करता है जावास्क्रिप्ट "वर्ग" और वे के बीच dependecies है खुद को। सभी संगीत कार्यक्रम संचालित करने वाली "प्राथमिक" कक्षा my-table.js है। main.js केवल अपने-table.js को निर्भरता है और इसे से एक प्लगइन बनाता है: (jQuery छोड़कर

require([ 
    'my-table' 
], function(MyTable) { 
    jQuery.fn.myTable = function(options) { 
     var table = new MyTable(this, options); 
     this.data('myTable', table); 
     return this; 
    }; 
}); 

अब मैं उन फ़ाइलों से है कि किसी भी निर्भरता के बिना सभी 6 फ़ाइलें हैं एक बड़ा js फ़ाइल बनाना चाहते कि उपयोगकर्ता को इसका संदर्भ देना चाहिए)। इसके लिए मैंने r.js (http://requirejs.org/docs/optimization.html) का उपयोग किया और नतीजतन मुझे एक बड़ी जेएस फ़ाइल मिली जो requ.js पर निर्भर करता है (और इसमें परिभाषित करने और आवश्यकता के लिए कॉल शामिल हैं)। मैंने इसका पालन किया: http://requirejs.org/docs/faq-optimization.html#wrap और मेरे सभी फ़ाइलों को उपयोग के लिए संयुक्त करने के लिए almond.js का उपयोग किया जो requ.js पर निर्भर नहीं है। यह ठीक काम करता है।
समस्या यह है कि मुझे सभी परिभाषाओं की आवश्यकता क्यों है और विधि कॉल और almond.js की आवश्यकता क्यों है? इस तरह: क्यों अनुकूलक केवल समारोह परिणामों को श्रेणीबद्ध कर सकता है नहीं (Why do concatenated RequireJS AMD modules need a loader? इस सवाल का वर्णन के रूप में):

(function() { 
    var utils = «function() { 
     .... 
     return Utils; 
    }»(); 
    var baseRow = «function(A) { 
     .... 
     return BaseRow; 
    }»(utils); 
    .... 
    .... 
    var myTable = ..... 

    //<--This is require call and therefore doesn't return a thing 
    (function(MyTable) { 
     jQuery.fn.myTable = function(options) { 
      var table = new MyTable(this, options); 
      this.data('myTable', table); 
      return this; 
     }; 
    })(myTable); 
})(); 

इस प्रक्रिया का एक परिणाम के रूप में, मैं चीजों को बाहर की जाँच करने का निर्णय लिया और मैन्युअल रूप से सभी के लिए फ़ाइलों को संयुक्त एक छोटा फ़ाइल मैं बादाम संस्करण के बाद 3k द्वारा छोटी फ़ाइल के साथ समाप्त होता है!
मुझे r.js अनुकूलक के पीछे तर्क नहीं मिला है जो आवश्यक .js निर्भर परिणाम बनाते हैं। मेरे मामले में, किसी को भी किसी भी फाइल का उपयोग करने की आवश्यकता नहीं होगी, मेरी प्राथमिक जेएस फ़ाइल एकमात्र उपभोक्ता है। तुम क्या सोचते हो?

उत्तर

0

findNestedDependencies अनुकूलक में विकल्प "गलत" है, जिसका अर्थ है कि जाने के बाद भी स्क्रिप्ट अनुकूलित कर रहे हैं, वहां अभी भी एक नेस्टेड require या define कॉल कि एक मॉड्यूल लोडर की आवश्यकता होगी हो सकता है के लिए डिफ़ॉल्ट मान। बाहरी निर्भरताओं के लिए एक लोडर भी आवश्यक है।

मैं सहमत हूं कि अगर पता चलता है कि नेस्टेड निर्भरता "सत्य" पर सेट की गई है और कोई बाहरी निर्भरता परियोजना का हिस्सा नहीं है, तो अनुकूलक लोडर की आवश्यकता को हटाने में सक्षम होना चाहिए।

-1

आप फ़ाइल में आवश्यक फ़ाइलों को शामिल कर सकते हैं। आप इसे एक प्राप्त स्क्रिप्ट कॉल के साथ कर सकते हैं।

$.getScript("my_lovely_script.js", function(){ 

    //whatever you want here. 

});