(जब मैं कहता हूँ कि कोणीय का अर्थ है कोणीय 2+ और स्पष्ट रूप से कोणीय-js कहूँगा यदि मैं कोणीय 1 का उल्लेख कर रहा हूँ)।
प्रस्तावना: यह भ्रामक है
कोणीय, और संभवतः अधिक सटीक रूप से कोणीय-क्लीव मिलकर जावास्क्रिप्ट में कई ट्रेंडिंग टूल शामिल हो गए हैं जो निर्माण प्रक्रिया में शामिल हैं। यह थोड़ा भ्रम की स्थिति पैदा करता है।
भ्रम को आगे बढ़ाने के लिए, इस शब्द compile
का उपयोग अक्सर कोणीय-जेएस में किया जाता था ताकि टेम्पलेट के छद्म-html को लेने और इसे DOM तत्वों में बदलने की प्रक्रिया का उल्लेख किया जा सके। यह वह भाग है जो संकलक करता है लेकिन छोटे भागों में से एक।
सबसे पहले, कोणीय को चलाने के लिए टाइपस्क्रिप्ट, कोणीय-क्लि या वेबपैक का उपयोग करने की आवश्यकता नहीं है। तुम्हारे प्रश्न का उत्तर देने के लिए। हमें एक साधारण प्रश्न पर ध्यान देना चाहिए: "कोणीय क्या है?"
कोणीय: यह क्या करता है?
यह खंड विवादास्पद हो सकता है, हम देखेंगे। इसके मूल में, सेवा जो कोणीय प्रदान करती है, एक निर्भरता इंजेक्शन तंत्र है जो जावास्क्रिप्ट, HTML और सीएसएस पर काम करता है। आप सभी छोटे टुकड़ों और टुकड़ों को व्यक्तिगत रूप से लिखते हैं और प्रत्येक छोटे टुकड़े में आप अन्य टुकड़ों को संदर्भित करने के लिए कोणीय के नियमों का पालन करते हैं। कोणीय तो किसी भी तरह पूरी तरह से बुनता है।
(थोड़ा) अधिक विशिष्ट होना:
- टेम्पलेट HTML को जावास्क्रिप्ट घटक में वायर्ड करने की अनुमति देते हैं। यह उपयोगकर्ता को स्वयं डोम पर इनपुट देता है (उदाहरण के लिए एक बटन पर क्लिक करके) जावास्क्रिप्ट घटक में फ़ीड करने के लिए और जावास्क्रिप्ट में चर और संरचना को नियंत्रित करने के लिए जावास्क्रिप्ट घटक में चर की अनुमति देता है।
- जावास्क्रिप्ट कक्षाओं (जावास्क्रिप्ट घटकों सहित) को उन अन्य जावास्क्रिप्ट कक्षाओं के उदाहरणों तक पहुंचने में सक्षम होने की आवश्यकता होती है जो वे पर निर्भर करते हैं (जैसे शास्त्रीय निर्भरता इंजेक्शन)। एक BookListComponent को एक BookListService के एक उदाहरण की आवश्यकता होती है, जिसे किसी BookListPolicy के उदाहरण की आवश्यकता हो सकती है या ऐसा कुछ हो सकता है। इन वर्गों में से प्रत्येक के पास अलग-अलग जीवनकाल हैं (उदाहरण के लिए सेवाएं आमतौर पर एकल हैं, घटक आमतौर पर एकल नहीं होते हैं) और कोणीय को उन सभी जीवन काल, घटकों के निर्माण, और निर्भरता के तारों का प्रबंधन करना पड़ता है।
- सीएसएस नियमों को इस तरह से लोड करने की आवश्यकता है कि वे केवल डोम के एक सबसेट पर लागू होते हैं (एक घटक की शैली उस घटक के लिए स्थानीय है)।
ध्यान देने वाली एक महत्वपूर्ण बात यह है कि जावास्क्रिप्ट इस बात के लिए ज़िम्मेदार नहीं है कि कैसे जावास्क्रिप्ट फाइलें अन्य जावास्क्रिप्ट फ़ाइलों (जैसे import
कीवर्ड) का संदर्भ देती हैं । वेबपैक द्वारा इसका ध्यान रखा जाता है।
कंपाइलर क्या करता है?
अब जब आप जानते हैं कि कोणीय क्या करता है, तो हम इस बारे में बात कर सकते हैं कि कंपाइलर क्या करता है। मैं मुख्य रूप से अज्ञानी होने के कारण बहुत तकनीकी होने से बचूंगा। हालांकि, एक निर्भरता इंजेक्शन प्रणाली में आप आमतौर पर मेटाडाटा किसी तरह का (जैसे कैसे करता है एक वर्ग कहते हैं के साथ अपने निर्भरता व्यक्त करने के लिए है I can be injected
, My lifetime is blah
या You can think of me as a Component type of instance
)। जावा में, स्प्रिंग ने मूल रूप से XML फ़ाइलों के साथ ऐसा किया था। जावा ने बाद में एनोटेशन को अपनाया और वे मेटाडेटा को व्यक्त करने का पसंदीदा तरीका बन गए। मेटाडेटा को व्यक्त करने के लिए C # विशेषताओं का उपयोग करता है।
जावास्क्रिप्ट में इस मेटाडेटा बिलिन को उजागर करने के लिए एक महान तंत्र नहीं है। कोणीय-जेएस ने एक प्रयास किया और यह बुरा नहीं था लेकिन बहुत सारे नियम थे जो आसानी से जांचे नहीं जा सकते थे और थोड़ा भ्रमित थे। कोणीय के साथ मेटाडेटा को निर्दिष्ट करने के दो समर्थित तरीके हैं। आप शुद्ध जावास्क्रिप्ट लिख सकते हैं और मेटाडेटा को मैन्युअल रूप से निर्दिष्ट कर सकते हैं, कुछ हद तक कोणीय-जेएस के समान और बस नियमों का पालन करते हुए और अतिरिक्त बॉयलर-प्लेट कोड लिख रहे हैं। वैकल्पिक रूप से, आप टाइपस्क्रिप्ट पर स्विच कर सकते हैं, जैसा कि ऐसा होता है, सज्जाकार (वे @
प्रतीक) होते हैं, जिनका उपयोग मेटाडेटा को व्यक्त करने के लिए किया जाता है।
तो यहाँ है जहाँ हम अंत में संकलक के लिए प्राप्त कर सकते हैं। कंपाइलर का काम उस मेटाडेटा को लेना है और काम करने वाले सिस्टम की प्रणाली बनाना है जो आपका एप्लिकेशन है। आप सभी टुकड़ों और सभी मेटाडेटा पर ध्यान केंद्रित करते हैं और कंपाइलर एक बड़ा इंटरकनेक्टेड एप्लिकेशन बनाता है।
कंपाइलर इसे कैसे करता है?
कंपाइलर के काम करने के दो तरीके हो सकते हैं, रनटाइम और फ़ॉर-ऑफ़-टाइम। यहाँ से मैं मान लूंगा कि आप टाइपस्क्रिप्ट का उपयोग कर रहे हैं:
- रनटाइम: जब टाइपस्क्रिप्ट कंपाइलर चलता है, तो यह सभी डेकोरेटर की जानकारी लेता है और इसे सजाए गए वर्गों, विधियों और क्षेत्रों से जुड़े जावास्क्रिप्ट कोड में बदल देता है। अपने में
index.html
आप अपने संदर्भ main.js
जो bootstrap
विधि कहते हैं । वह विधि आपके शीर्ष स्तर के मॉड्यूल से गुजरती है।
बूटस्ट्रैप विधि रनटाइम कंपाइलर को फायर करती है और इसे उस टॉप लेवल मॉड्यूल का संदर्भ देती है। रनटाइम कंपाइलर तब उस मॉड्यूल को क्रॉल करना शुरू कर देता है, उस मॉड्यूल द्वारा संदर्भित सभी सेवाओं, घटकों, और संबंधित मेटाडेटा के सभी, और आपके एप्लिकेशन को बनाता है।
- एओटी: रनटाइम के सभी काम करने के बजाय एंगुलर ने बिल्ड टाइम पर ज्यादातर काम करने के लिए एक तंत्र प्रदान किया है। यह लगभग हमेशा एक वेबपैक प्लगइन का उपयोग करके किया जाता है (यह सबसे लोकप्रिय अभी तक ज्ञात सबसे कम एनपीएम पैकेजों में से एक होना चाहिए)। यह टाइपस्क्रिप्ट संकलन के चलने के बाद चलता है इसलिए यह अनिवार्य रूप से रनटाइम कंपाइलर के समान इनपुट को देखता है। एओटी कंपाइलर रनटाइम कंपाइलर की तरह ही आपके एप्लिकेशन को बनाता है लेकिन फिर इसे जावास्क्रिप्ट में वापस सेव कर देता है।
यहां लाभ सिर्फ यह नहीं है कि आप स्वयं संकलन के लिए आवश्यक सीपीयू समय बचा सकते हैं, लेकिन यह आपको अपने आवेदन के आकार को कम करने की भी अनुमति देता है।
विशिष्ट उत्तर
कोणीय CLI पहले टाइपस्क्रिप्ट => में लिखे कंपाइलर में निर्मित कोणीय को कॉल करता है, फिर टाइपस्क्रिप्ट ट्रांसपिलर => को कॉल करता है और फिर वेब / बंडल को डिस्ट / डायरेक्टरी में बंडल और स्टोर करने के लिए कहता है।
नहीं। कोणीय सीएलआई वेबपैक को बुलाता है (Angular CLI की वास्तविक सेवा वेबपैक को कॉन्फ़िगर कर रही है। जब आप ng build
इसे चलाते हैं तो यह एक प्रॉक्सी से अधिक नहीं है जो वेबपैक शुरू करने के लिए है)। वेबपैक पहले टाइपस्क्रिप्ट कंपाइलर को कॉल करता है, फिर कोणीय कंपाइलर (एओटी को मानते हुए), उसी समय आपके कोड को बंडल करते हुए।
यद्यपि बूटस्ट्रैप प्रक्रिया की व्याख्या करने के लिए main.ts का उपयोग स्टेटमेंट में किया गया है, क्या कोणीय ऐप बूटस्ट्रैप नहीं है या जावास्क्रिप्ट .js फ़ाइलों का उपयोग करना शुरू कर दिया है?
मैं पूरी तरह से निश्चित नहीं हूं कि आप यहां क्या पूछ रहे हैं। main.ts
जावास्क्रिप्ट में नीचे स्थानांतरित किया जाएगा। उस जावास्क्रिप्ट में एक कॉल शामिल होगी, bootstrap
जो कि कोणीय में प्रवेश बिंदु है। जब bootstrap
किया जाता है तो आपके पास अपना पूर्ण कोणीय अनुप्रयोग चल रहा होगा।
इस पोस्ट में कहा गया है कि कोणीय के दो संकलक हैं:
संकलक देखें
मॉड्यूल संकलक
सच कहूँ तो मैं यहाँ सिर्फ अज्ञानता का दावा करने जा रहा हूँ। मुझे लगता है कि हमारे स्तर पर हम इसे केवल एक बड़ा संकलक मान सकते हैं।
क्या किसी को पता है कि सभी भाग एक साथ गहराई में कैसे फिट होते हैं?
मुझे उम्मीद है कि उपरोक्त ने इसे संतुष्ट किया है।
@ मुझे नहीं: कोणीय निर्भरता इंजेक्शन से अधिक करता है
ज़रूर। यह रूटिंग, व्यू बिल्डिंग, चेंज डिटेक्शन और अन्य सभी प्रकार की चीजों को करता है। संकलक वास्तव में निर्माण और परिवर्तन का पता लगाने के लिए जावास्क्रिप्ट उत्पन्न करता है। मैंने झूठ बोला जब मैंने कहा कि यह सिर्फ निर्भरता इंजेक्शन था। हालांकि, निर्भरता इंजेक्शन कोर पर है और बाकी उत्तर को चलाने के लिए पर्याप्त है।
क्या हमें इसे कंपाइलर कहना चाहिए?
यह संभवतः बहुत अधिक पार्सिंग और लेक्सिंग करता है और निश्चित रूप से बहुत सारे कोड उत्पन्न करता है, इसलिए आप इसे उस कारण के लिए एक कंपाइलर कह सकते हैं।
दूसरी ओर, यह वास्तव में आपके कोड को केवल एक अलग प्रतिनिधित्व में अनुवाद नहीं कर रहा है। इसके बजाय यह कोड के विभिन्न टुकड़ों का एक गुच्छा ले रहा है और उन्हें एक बड़ी प्रणाली के उपभोज्य टुकड़ों में बुनाई कर रहा है। बूटस्ट्रैप प्रक्रिया तब (संकलन के बाद, यदि आवश्यक हो) उन टुकड़ों को ले जाती है और उन्हें कोणीय कोर में प्लग करती है।
The compiler does actually generate
बिल्डिंग और चेंज डिटेक्शन देखने के लिए आपके स्टेटमेंट जावास्क्रिप्ट में संदेह है। `यह झूठ नहीं है। यही संकलक क्या नहीं है? और कोणीय निर्भरता इंजेक्शन करता है।