2013-05-04 16 views
5
के साथ संयोजन में requirejs का उपयोग करके पथ

कई जावास्क्रिप्ट फ़ाइलें, में फ़ोल्डर स्क्रिप्ट/फ़ोल्डर 1, स्क्रिप्ट/folder2 का आयोजन कर रहे हैं, ...सापेक्ष टाइपप्रति और एएमडी

requirejs.config.baseUrl के साथ एक फ़ोल्डर डिफ़ॉल्ट के रूप में परिभाषित किया गया है , उदाहरण के लिए स्क्रिप्ट/फ़ोल्डर 1। फिर requirejs.config.paths में कुछ फ़ाइलों को केवल फ़ाइल नाम से संबोधित किया जाता है, और कुछ को एक सापेक्ष पथ (जैसे ../folder2/blabla) के साथ संबोधित किया जाता है।

टाइपसिप्ट फ़ाइल फ़ोल्डर 2/blabla.ts को कोड करते समय हमें फ़ोल्डर 1 से मॉड्यूल "गणित" की आवश्यकता होती है। तो हम

import MOD1 = module("../folder1/math"); 

टाइपस्क्रिप्ट के संबंध में, कुछ भी ठीक है। यह मॉड्यूल पा सकते हैं। हालांकि, requjs के साथ एक समस्या है। यह मॉड्यूल "../folder1/math" नहीं जानता है, यह केवल "गणित" जानता है।

समस्या यह प्रतीत होती है कि आयात विवरण एक फ़ाइल नाम की अपेक्षा करता है, जिसे वर्तमान निर्देशिका से शुरू करके संबोधित किया जा रहा है। हालांकि, यह मॉड्यूल आईडी नहीं है जिसके लिए आवश्यक है।

आवश्यकताएं कॉन्फ़िगरेशन और टाइपस्क्रिप्ट में आयात विवरण दोनों में, कहीं भी पूर्ण पथ का उपयोग करके, समस्या हल करती है।

क्या मैं यह गलत कर रहा हूं? या जाने के रास्ते के पूर्ण पथ हैं?

+1

मैंने पाया है कि या तो पूर्ण पथ, या पथ पहले मॉड्यूल कि js की आवश्यकता के सापेक्ष भार (आमतौर पर मेरे जेएस ऐप की जड़ - या तो स्क्रिप्ट फ़ोल्डर या डूरंडल ऐप फ़ोल्डर के साथ - लेकिन जरूरी नहीं कि मेरी वेबसाइट की जड़) काम करें। – JcFx

+0

उत्तर के लिए बहुत बहुत धन्यवाद। यदि पहला मॉड्यूल/स्क्रिप्ट में है, तो बेसयूआरएल उस पथ पर सेट हो जाएगा। फिर यदि "फ़ोल्डर 1" से एक मॉड्यूल का उपयोग किया जाता है, तो requjs के संबंध में इसे "folder1/blabla" जैसे संबोधित किया जाना चाहिए। फिर आप टाइपस्क्रिप्ट स्टेटमेंट में क्या लिखेंगे? क्या आप मॉड्यूल लिखते हैं ("फ़ोल्डर 1/ब्लब्ला")? क्या होगा यदि मॉड्यूल, जहां आयात कथन लिखा गया है, "फ़ोल्डर 2" में सहेजा गया है? क्या टाइपस्क्रिप्ट फिर मॉड्यूल को स्वीकार करता है ("फ़ोल्डर 1/ब्लब्ला")? – mgs

+0

हां। जहां तक ​​मैं देख सकता हूं कि पथ बदलता नहीं है, जहां भी आप आयात करते हैं (जब तक आप अभी भी उसी एप्लिकेशन संदर्भ में हैं - फिर भी उस प्रारंभिक आधार यूआरएल से लोड मॉड्यूल की श्रृंखला में)। – JcFx

उत्तर

6

एक baseUrl निर्दिष्ट करें अपने टाइपप्रति फ़ाइलों के रूट फ़ोल्डर के बराबर होने का:

require.config({ 
    baseUrl: './scripts', 
} 
) 

फिर जब आप स्क्रिप्ट से शुरू संबंधित पथ का उपयोग फ़ोल्डर तुम सिर्फ कर सकते हैं सामान्य रूप से आपके जैसे आयात टाइपस्क्रिप्ट में करते हैं और requjs एक ही आधार पथ का उपयोग करेंगे।

अद्यतन: इस प्रस्तुति अपने सभी यूआरएल का जवाब चाहिए/टाइपप्रति सवालों से js का उपयोग कर: कोड के साथ http://www.youtube.com/watch?v=4AGQpv0MKsA: https://github.com/basarat/typescript-amd/blob/master/README.md

+0

उत्तर के लिए बहुत बहुत धन्यवाद। तो फिर requjs पथ खंड में मॉड्यूल आईडी उदा। "फ़ोल्डर/blabla"।यह एक पहचानकर्ता है, जिसका उपयोग आयात विवरण के साथ नहीं किया जा सकता है। लेखन मॉड्यूल ("फ़ोल्डर/ब्लैब्ला") काम नहीं करेगा, क्योंकि टाइपस्क्रिप्ट का मूल फ़ोल्डर फ़ोल्डर प्रतीत होता है, जहां वर्तमान में संपादित फ़ाइल है। इसलिए यदि वर्तमान में संपादित की गई टाइपस्क्रिप्ट फ़ाइल "anotherfolder" में है, तो कथन देखेंगे "anotherfolder/फ़ोल्डर/blabla"। – mgs

+0

@mgs मैंने आपके किसी भी प्रश्न का उत्तर देने के लिए एक प्रेजेंटेशन (अपडेट देखें) बनाया है। अगर यह मेरी मदद नहीं करता है तो मुझे बताएं। मैं आपके मुद्दे के बारे में अस्पष्ट हूं। – basarat

+0

@mgs आप प्रोजेक्ट को फोर्क कर सकते हैं और आपके पास होने वाली त्रुटि स्थिति बना सकते हैं। तो मैं इसे देख सकता हूं। – basarat

2

आपको प्रत्येक मॉड्यूल के लिए कॉन्फ़िगरेशन निर्दिष्ट पथ की आवश्यकता होती है। यही कारण है कि हल करना चाहिए रास्तों समस्या:

require.config({ 
    paths: { 
     jquery: 'libs/jquery-1.7.1.min', 
     jqueryui: 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min' 
     // Other modules... 
    } 
}); 
+0

उत्तर के लिए बहुत बहुत धन्यवाद। यदि कोई मॉड्यूल इस तरह निर्दिष्ट है, तो टाइपस्क्रिप्ट में आयात कथन कैसे लिखा जा सकता है? यदि वर्तमान में संपादित टाइपस्क्रिप्ट फ़ाइल एक ही फ़ोल्डर में है, तो इसका उपयोग मॉड्यूल ("ब्लब्ला") के साथ किया जा सकता है और कुछ भी ठीक है। हालांकि, अगर यह किसी अन्य फ़ोल्डर में है, तो मॉड्यूल ("../ फ़ोल्डर/ब्लैब्ला") जैसे कुछ का उपयोग किया जाना चाहिए। और फिर requjs मॉड्यूल के बारे में कुछ भी नहीं जानता है। – mgs

+0

यह एक अच्छा जवाब नहीं है। "पथ" ऑब्जेक्ट में एप्लिकेशन में उपयोग किए गए सभी मॉड्यूल लिखना बोझिल है। –

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