2017-02-07 5 views
12

मुझे लगता है कि मैं लक्ष्य और lib विकल्प से उलझन में हूं और वे स्रोत कोड में समर्थित सुविधाओं के साथ कैसे सहभागिता करते हैं। मुझे लगता है कि दस्तावेज़ों को थोड़ा सुधार करने की जरूरत है इसलिए कोई मुद्दा उठाने से पहले यहां पूछ रहा हूं।लक्ष्य और lib कंपाइलर विकल्पों की स्पष्टीकरण की आवश्यकता है

मैं भोलेपन मान लिया है कि लक्ष्य है कि उत्पादन कोड (एक मॉड्यूल लोडर के अलावा) को चलाने के लिए की आवश्यकता है जे एस के संस्करण निर्दिष्ट करता है। इस प्रकार हम हमेशा सभी उन्नत जेएस विशेषताओं (जैसे ऑब्जेक्ट फैल) का उपयोग कर सकते हैं कि टीएस हमारे स्रोत में समर्थन करता है और संकलक हमारे द्वारा निर्दिष्ट लक्ष्य के लिए उपयुक्त कोड उत्पन्न करता है। मुझे लगता है कि इसमें पॉलीफिल इत्यादि थे और कोड लक्ष्य वीएम पर ही चलाएगा।

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

मुझे लगता है कि यहाँ देख सकते हैं कि प्रकार के और दूसरों है कि पर निर्भर नहीं है कुछ भाषा विशेषताएं हैं। हालांकि यह स्पष्ट नहीं है कि क्या यह इस स्थिति के कारण का हिस्सा है।

क्या कोई इसे स्पष्ट कर सकता है?

क्यों है एक माध्यमिक सवाल यह है कि दोनों एक ES6 और एक ES2015 lib जब वे हमेशा की तरह कर रहे हैं एक ही बात की जा रही है के रूप में दस्तावेज।

धन्यवाद

उत्तर

26

(यह एक टिप्पणी के रूप में शुरू किया, लेकिन यह बहुत लंबा हो गया।)

इसके पीछे कुछ इतिहास है, क्योंकि यह एक सा आंशिक रूप से भ्रामक है। मैं आधिकारिक इस जवाब देने के लिए योग्य नहीं हूँ, लेकिन मैं प्रारंभिक विकास के बाद से टाइपप्रति निम्नलिखित किया गया है और यह मेरी समझ है:

  • --target संकलक क्या पुस्तकालय संस्करण शामिल करने के लिए, जबकि संकलन (उदाहरण के लिए ES5 एक संकलक दे देंगे बताता है त्रुटि अगर आप Promise उपयोग करें, लेकिन ES6 पता चल जाएगा सब के बारे में Promise) और जे एस का कौन सा संस्करण संकलक द्वारा उत्सर्जित है (उदाहरण के ES5 के लिए नीचे संकलन होगा वर्ग वाक्यविन्यास, लेकिन ES6 उस में छोड़ देंगे)।
  • --lib बाद में जोड़ा गया था ताकि उत्सर्जित जेएस लक्ष्य को बदले बिना संकलित करते समय आपको लाइब्रेरी संस्करण का उपयोग करने के लिए बेहतर नियंत्रण दिया जा सके। उदाहरण के लिए, एक आम समस्या यह थी कि आप Promise जैसे ES6 लाइब्रेरी सुविधाओं के लिए पॉलीफिल शामिल कर सकते हैं, लेकिन आप class सिंटैक्स को संकलित करके ES5 ब्राउज़र को लक्षित करना चाहते हैं। इससे पहले कि आप या तो --lib के आसपास थी ES6 को लक्षित करने के Promise के बारे में त्रुटियों संकलन, तो फिर से कोलाहल का उपयोग कर नीचे संकलन, या आप ES5 लक्षित करते हैं और Promise के लिए अपने स्वयं के प्रकार परिभाषा प्रदान करते हैं ताकि संकलक आप एक नहीं देता सकता है से बचने के लिए किया था त्रुटि। अब --lib साथ आप बस कह सकते हैं अपने --target ES5 और --lib ES6, और संकलक शिकायत नहीं होगा Promise के बारे में, लेकिन अभी भी ES5 करने के लिए नीचे-संकलन।
  • न तो विकल्प टीएस किसी भी पुस्तकालय polyfills (Promise, आदि) का उत्सर्जन, जैसा कि आप स्पष्ट रूप से पता चला कारण होगा; सही रनटाइम पुस्तकालय प्रदान करना आपकी ज़िम्मेदारी है।यह केवल __extends और __awaiter (class या async) में अंतर केवल एक एपीआई नहीं है जिसे रनटाइम पर पॉलीफ़िल्ल्ड किया जा सकता है, यह सिंटैक्स प्रभावों के साथ एक भाषा सुविधा है) कुछ डाउन-स्तरीय भाषा संगतता सहायकों को उत्सर्जित करता है। --lib विकल्प रनटाइम पर आप जो जानते हैं उसके आधार पर संकलन जांच का सही स्तर प्राप्त करने का आपका तरीका है।
  • क्यों ES6 और ES2015 दोनों के कारण है, ऐसा इसलिए है क्योंकि ईसीएमएस्क्रिप्ट ने नाम बदल दिया और टीएस ने पुराने नाम को पीछे की संगतता के लिए वैध विकल्प के रूप में छोड़ा। :)

आप इस इन टीएस मुद्दों में शामिल की एक बहुत कुछ मिल जाएगा:

+0

एक उत्कृष्ट जवाब के लिए धन्यवाद। तो मुझे लगता है कि भ्रम की जड़ें हैं कि '2 'लक्ष्य'' उन 2 चीजें करता है, साथ ही कुछ भाषा विशेषताओं को संकलित किया जाता है जबकि अन्य नहीं होते हैं लेकिन स्रोत में उपयोग के लिए lib की आवश्यकता होती है .. –

+0

वह भी एक अन्य प्रश्न का उत्तर दें - क्यों पृथ्वी पर आप टीएस और बेबेल का उपयोग करेंगे :) तो कई मौजूदा ब्राउज़रों को लक्षित करने का एक अच्छा तरीका टीएस में ईएस 6 को पार करने के साथ बीएस में लक्षित ईएस 6 है। –

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