2012-12-28 19 views
11

प्रश्न का उपयोग कर मॉड्यूल के रूप: वहाँ एएमडी समर्थन (संकलक के माध्यम से) का उपयोग कर एक टाइपप्रति मॉड्यूल इसलिए यह एक निर्भरता के रूप में jQuery शामिल में jQuery आयात करने के लिए कोई तरीका है?आयात jQuery और अन्य 3 पार्टी पुस्तकालय टाइपप्रति में एएमडी

आयात विवरण प्राप्त करने की कुंजी है, जो मॉड्यूल को परिभाषित कथन में एक निर्भरता बनाता है (नीचे देखें)।

define(["require", "exports", 'dataservice', 'jquery', 'knockout'], 
    function(require, exports, __ds__, $ , ko) { 
     ... 
    } 
) 

विवरण: मैं एएमडी के साथ एक टाइपप्रति मॉड्यूल के रूप jQuery (और अन्य 3 पार्टी पुस्तकालयों) आयात करना चाहते हैं। लक्ष्य उन्हें require सूची में निर्भरता के रूप में प्रकट करना है। हालांकि, ऐसा करने के लिए टाइपस्क्रिप्ट बनाने का एकमात्र तरीका import कथन होना प्रतीत होता है। और आयात करने के लिए आपको आयात करने के लिए एक मॉड्यूल की आवश्यकता है। लेकिन ... इंगित करने के लिए कोई jquery मॉड्यूल नहीं है। से।

समाधान:

  1. मैं require.js के लिए main.js में .d.ts और प्रीलोड jQuery का उल्लेख कर सकते हैं, लेकिन यह सब 3 पार्टी पुस्तकालयों पहले से लोड होने का मतलब है। भयानक नहीं, लेकिन आदर्श नहीं है क्योंकि यह जावास्क्रिप्ट और एएमडी के साथ पहले से ही क्या कर सकता है इसका लाभ नहीं उठाता है।
  2. मैं प्रत्येक तृतीय पक्ष लाइब्रेरी के लिए एक मॉड्यूल बना सकता हूं और इसे लपेट सकता हूं, लेकिन फिर मुझे $। $ जैसे कुछ मिलता है। जो भी बदतर है, आईएमओ (और इरिस्क इनमें से प्रत्येक के लिए गलत मॉड्यूल कोड लिख रहा है और सिंचन से बाहर निकल रहा है)।

तो अब मैं मुख्य में jquery preloading हूँ। Js. लेकिन फिर से, लेकिन यह आदर्श से कम है। किसी भी लाइब्रेरी जैसे नॉकआउट, रीढ़ की हड्डी, आदि के लिए ऐसा करना होगा जिसमें कोई मॉड्यूल नहीं है।

कोई बेहतर सुझाव या कुछ मुझे याद आ रही है?

अपडेट/स्पष्टीकरण:

मैं भी शिम्स config में पुस्तकालयों के बीच निर्भरता के लिए उपयोग कर सकते हैं। लेकिन यह अभी भी तीसरे पक्ष के लोगों को preloads। उदाहरण:

require.config({ 
    baseUrl: '../', 
    paths: { 
     'jquery': 'lib/jquery-1.7.2', 
     'underscore': 'lib/underscore' 
    }, 
    shim: { 
     jquery: { 
      exports: '$' 
     }, 
     underscore: { 
      exports: '_' 
     } 
    } 
}); 
+0

इसके लायक होने के लिए, मैं उन्हें केवल main.js (या इसके समकक्ष) में लोड कर रहा हूं। यह बदसूरत है, लेकिन यह काम करता है। –

+0

केन - हाँ, यह मूल रूप से मैं तीसरे पक्ष के लोगों के साथ प्री-लोडिंग करके कर रहा हूं। जब हम जानते हैं कि हम जावास्क्रिप्ट में इसे बेहतर कर सकते हैं तो बस गंदा लगता है। –

+0

सहमत हुए। टीएस में मॉड्यूल सिस्टम अभी भी थोड़ा कच्चा लगता है - थोड़ी सी भाषा की तरह :-)। उम्मीद है कि सुधार आ रहे हैं। –

उत्तर

4

एक अन्य काम के आसपास requirejs के लिए एक प्रकार परिभाषा का उपयोग करें और नहीं बल्कि एक import बयान से अपनी खुद की require बयानों का उपयोग करें, हो जाएगा।

इस के नकारात्मक पक्ष यह है कि टाइपप्रति import एएमडी या सिर्फ एक संकलक परिवर्तन के साथ CommonJS साथ इस्तेमाल किया जा सकता है, तो आप अपने कार्यक्रम से अधिक आप एक import साथ होगा में requirejs से शादी की जाएगी।

एक मौजूदा definition for requirejs on Definitely Typed है।

+0

अच्छा बिंदु। मुझे सच में उम्मीद है कि टाइपस्क्रिप्ट टीम बाहरी मॉड्यूल के रूप में तीसरे पक्ष के पुस्तकालयों के इलाज/शिम को आसान बनाती है। –

+1

मुझे नहीं लगता कि "कोई महान जवाब" के अलावा इस बिंदु पर कोई जवाब नहीं है। तो मैं तुम्हारा सबसे नज़दीक के रूप में चिह्नित करूंगा :) –

+0

@Steve: क्या टाइपस्क्रिप्ट से कोई अपडेट हैं जो इस समस्या को हल कर सकते हैं? –

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