RequJS

2012-03-05 15 views
14

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

define(
    ['imported_module'], 
    function(module){ 
     module.doSomething(); 
    } 
) 

हालांकि के रूप में फ़ाइलों की संख्या बढ़ती है, मैं चाहता हूँ तय करने के लिए कैसे संरचना करने के: मैं अपने खुद के नाम स्थान का उपयोग नहीं करते हैं, एक मॉड्यूल एक उदाहरण है, जो अन्य मॉड्यूल में इस्तेमाल किया जा सकता, यानी रिटर्न इन फ़ाइलों को फ़ोल्डर्स में। वर्तमान में मैं अपने फ़ाइलों को नाम देने निम्नलिखित योजना का उपयोग करें:

[projectname].[packagename].[ModuleName] 

एक उदाहरण stackoverflow.util.HashMap.js हो सकता है। मैं जैसे मॉड्यूल का नाम के लिए एक परियोजना फ़ोल्डर, पैकेज प्रति एक फ़ोल्डर लागू करने और फ़ाइलों का नाम बदलना, चाहते हैं:

stackoverflow/util/HashMap.js 

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

फ़ाइल

stackoverflow/util/stackoverflow.util.HashMap.js 

बयान से आयात योग्य होना चाहिए

define(['stackoverflow.util.HashMap'],function(HashMap){}); 

संरचना बड़े जावास्क्रिप्ट परियोजनाओं के साथ और यदि ऐसा है तो किसी को भी अनुभव है, तो आप अपने दृष्टिकोण को साझा कर सकता है?

+2

आप शायद कस्टम प्लगइन के साथ ऐसा कर सकते हैं ... कुछ उपयोग करें! Stackoverflow.util.HashMap' – blockhead

+1

ब्लॉकहेड ने कहा: प्लगइन एपीआई में "सामान्यीकृत" फ़ंक्शन है जो एक नाम लेता है और इसे पथ में अनुवाद करता है । एक नज़र डालें: http://requirejs.org/docs/plugins।एचटीएमएल # apinormalize – David

उत्तर

9

आपको अपने जेएस फ़ाइल नामों पर रूटिंग जानकारी निर्दिष्ट नहीं करना चाहिए, वे नामस्थान और फ़ोल्डर पथ की नौकरियां हैं। तो stackoverflow/उपयोग/HashMap.js बस ठीक है। और निर्भरता बताने के लिए आप परिभाषित कर सकते हैं ("स्टैक ओवरफ्लो/उपयोग/हैश मैप", ....)

यदि आपको अपने मॉड्यूल को एक अलग फ़ोल्डर्स में रखना है, तो आप अपने लोडर के लिए पथ कॉन्फ़िगर कर सकते हैं, RequJS API से this manual देखें।

आपकी जेएस फाइलों को ढांचे के लिए कोई अच्छा तरीका नहीं है। लेकिन एक रूट फ़ोल्डर में रूट नेमस्पेस रखना हमेशा एक अच्छा अभ्यास है। आप dojo source code और YUI source code देख सकते हैं और अपनी परियोजना के लिए इसी तरह के तरीकों का उपयोग कर सकते हैं। वे दोनों बड़े पैमाने पर जावास्क्रिप्ट परियोजनाएं हैं।

+0

आपके उत्तर के लिए धन्यवाद, मैं उन स्रोतों पर एक नज़र रखूंगा! Requजेएस के मैनुअल ऑप्टिमाइज़ेशन टूल के संबंध में नामित निर्भरताओं का उपयोग न करने की सलाह देते हैं। – thomaux

2

वास्तव में मानक इंटरफ़ेस का उपयोग करके सभी जेएस लोड करने के लिए जेएस लिब रूटिंग प्राप्त करना बेहतर होता है: "js.yoursite.com/lib-0.2.js" राउटर (PHP या अन्य, और क्वेरी कैश करने में सक्षम) होना चाहिए। तो वहां आप अपने द्वारा उपयोग किए जाने वाले पूरे पैच को निर्धारित और नियंत्रित कर सकते हैं। चूंकि सामान्य jquery प्लगइन एक डीआईआर, jquery के साथ, और अपने स्वयं के कस्टम प्लगइन्स पर नहीं रहना चाहिए।

और वहाँ आप अपने आप नियमों से प्रत्येक परियोजना पर नियंत्रण:

jquery/ 
    plugins/ 
    jquery.prettyPhoto.js 
    jquery.min.js 

mySuperJS/ 
    stable.0/ -- there your production version for 1.0 branch 
    module.js 
    0.1/ 
    module.js 
    0.2/ 
    module.js 
    0.3/ 
    module.js 

myOtherlib/ 
    stable.0/ -- production version for all 0.* versions 
    stable.1/ -- production version for all 1.0 versions 
    0.1/ 
    0.2/ 
    0.3/ 
    0.4/ 
    0.4.1/ 
    0.4.1.18/ 

हम एक साल के आसपास इस तरह संरचना का उपयोग कर रहे हैं और यह हमारे लिए सबसे अच्छा है। लेकिन कभी-कभी हम अधिक जटिल समाधान का उपयोग करते हैं और libs, plugins, tools, घटकों और ऐप्स के लिए सभी मॉड्यूल अलग करते हैं।

+0

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