एंटरप्राइज़ ऐप को Angular 16 में अपग्रेड करना
मैं पूरी तरह से सभी नए Angular v16 फीचर्स द्वारा खरीदा गया हूं , जो सिग्नल से शुरू होता है , और अच्छी तरह से, बाकी सब कुछ। और मैं सिर्फ यह देखने के लिए कि यह कितना कठिन हो सकता है, कंपनी के ऐप्स में से किसी एक को अपग्रेड करने के आग्रह को रोक नहीं सका।
अग्रणी धार और खून बहने वाला किनारा है। आप नेतृत्व करना या रक्तस्राव करना चुन सकते हैं, यह आपकी पसंद का दर्द है।
हर कोई ( लगभग ) एंगुलर 16 के बारे में बात कर रहा है। प्रचार करें या नहीं, सबसे अधिक संभावना है कि आप इसके बारे में पहले ही पढ़ चुके हैं:
- दानेदार प्रतिक्रियाशीलता (संकेत)
- आवश्यक @Inputs ()
- इनपुट के रूप में क्वेरी, डेटा और रिज़ॉल्वर पैराम्स ()
- नष्ट करने योग्य सदस्यताएँ
- ngComponentOutlets पर इनपुट
- विकास सर्वर के लिए Vite
- एसएसआर हाइड्रेशन
- संकेत, संकेत, संकेत…
मौजूदा एंटरप्राइज़ एप्लिकेशन के लिए पकड़ कहां है?
केवल आइवी समर्थित है।
और दर्द?
पुराने पुस्तकालयों...
किस पर दोष लगाएँ?
ओह ! मुश्किल सवाल। लेकिन यह जिम्मेदारियों का मिश्रण है।
- कोणीय पुस्तकालय डेवलपर्स । बस कुछ पुस्तकालयों के नाम के लिए: कस्टम-वैलिडेटर्स , टेक्स्ट-मास्क, फॉर्मली के लिए पुराने संस्करण, एनजी-बूटस्ट्रैप , नेबुलर (जल्द ही पुराने संस्करणों पर अधिक)। नवीनतम या कम से कम समर्थित कोणीय संस्करण का उपयोग करने के लिए कोई भी ठीक से अपग्रेड नहीं किया गया है। कुछ को स्पष्ट रूप से छोड़ दिया जाता है। आइवी समर्थित नहीं है।
- कंपनी डेवलपर्स । ठीक है, मुझे पता है कि आपकी सभी निर्भरताओं को अद्यतित रखना आसान नहीं है, यदि " कोड पहले से ही काम कर रहा है, तो अद्यतन करने की कोई वास्तविक आवश्यकता नहीं है " प्राप्त करना अधिक कठिन है। Angular 15 में अपडेट करते समय पहले ही इस दर्द से गुज़र चुके हैं; कुछ भारी और बुरी तरह से अनुकूलित कोणीय सामग्री घटक अभी भी हमारे कोड में शोर कर रहे हैं (पता नहीं मॉड्यूल कितने समय तक
LegacyMaterialXXX
खड़ा रहेगा)। - एंगुलर टीम ( ?) हम इस पर बहस कर सकते हैं, लेकिन एमएचओ पर सवाल यह होना चाहिए कि "क्या एंगुलर 16 मौजूदा एंटरप्राइज़ ऐप्स को अपग्रेड करने के लिए है या केवल शून्य से नए ऐप बनाने के लिए है?" ”।
यह टिप्पणी सुंदर नहीं है ( मुद्दे से: v16 #24797 में एनजीसीसी को हटाने के बाद गैर-आइवी पुस्तकालयों को संकलित करने का वैकल्पिक तरीका) :
मेरा मतलब है, एक बहुत बड़ा कोड बेस, जो कुछ (कई) " पहले से ही इस तरह से काम करता है " घटकों को छोड़ देता है जो परित्यक्त पुस्तकालयों पर भरोसा करते हैं, अपग्रेड करना इतना आसान नहीं है। इसका मतलब एक पूरी नई परियोजना (डेवलपर समय) भी हो सकता है, और किसलिए? इतना कोणीय ≤ 17 सब कुछ फिर से तोड़ देता है? कठिन निर्णय। “ शायद हमें एंगुलर 9 के साथ रहना चाहिए था… ”
अगर किसी को बूटस्ट्रैप ( एनजी-बूटस्ट्रैप नहीं ) संस्करण 4 से 5 अपग्रेड के साथ संघर्ष करना पड़ा, तो आपको थोड़ा सा अंदाजा हो सकता है, ज्यादातर चीजें अभी भी काम करती हैं और लगभग (लगभग) एक जैसी दिखती हैं, लेकिन एक ही समय में, कई चीजें जो काम करती थीं ( या बूटस्ट्रैप मानकों पर अच्छा दिखता है) समाप्त हो गया।
एक कोड बेस की कल्पना करें जो पुराने बूटस्ट्रैप शैलियों, भारी अनुकूलित और खराब विकसित कोणीय सामग्री घटकों, कई अनुरक्षित निर्देशों और पुस्तकालयों पर निर्भर करता है जो एनिमेशन से सत्यापन करने के लिए संभालते हैं।
एहम के लिए एक बेहतर तरीके को बढ़ावा देने वाले किसी भी ढांचे के संस्करण में अपग्रेड करना ..., सब कुछ (?) एक आसान काम नहीं होगा।
पुराने संस्करण, क्यों?
जब आप किसी प्रोजेक्ट पर काम कर रहे हों तो आपको निम्नलिखित निर्णय का सामना करना पड़ सकता है:
क्या हमें यूआई ढांचे का उपयोग करना है? या क्या हम सादे CSS का उपयोग करके स्टाइल किए गए हैंड कोडेड एड-हॉक घटकों से चिपके रहते हैं?
अपना जहर चुनें:
- सामग्री
- बूटस्ट्रैप
- निहारिका
- टेलविंड
- आप इसे नाम दें, हमारे पास अनंत विकल्प हैं
उन्नयन दर्द अपरिहार्य है।
मैंने उन्नयन के अपने प्रयास पर जोर दिया। यह कितना सख्त हो सकता है?
तो बस संकलन त्रुटियों के बिना एक रनिंग ऐप प्राप्त करने के लिए (विज़ुअल ब्रेकेज को अनदेखा करते हुए), मैंने अधिकांश पुस्तकालयों को अपडेट किया जिन्हें अपडेट किया जा सकता था। बार-बार कोशिश की, और बार-बार ... कुल्ला और दोहराना ...
मुख्य समस्या यह है कि आपके पास कई पुराने, परित्यक्त, या अनुरक्षित पुस्तकालय हो सकते हैं जहाँ अंतर्निहित कोड काम करता है, फिर भी काम करता है! एकमात्र समस्या यह है कि कोणीय निर्भरता n ये पुस्तकालय अप्रचलित हैं।
उदाहरण के लिए। मैं जिस प्रोजेक्ट पर काम कर रहा हूं, उसमें इस तरह की लाइब्रेरी में से एक टेक्स्ट-मास्क है , जो 5 साल पहले की लाइब्रेरी है। और भले ही यह एक अप्रबंधित पुस्तकालय है, फिर भी कोड काम करता है। किसी अन्य लाइब्रेरी में माइग्रेट करने के लिए डेवलपर के समय + परीक्षण के लिए समय की आवश्यकता होगी जो अभी भी पहले की तरह काम करता है।
मुख्य पुस्तकालय कोड को कॉपी और पेस्ट किया जैसे कि यह परियोजना में एक आंतरिक पुस्तकालय था, कुछ समायोजन किए, और वोइला , यह अभी भी काम करता है, कोड गलत नहीं है, पुस्तकालय निर्भरताएं " गलत " हैं। फिर भी, यदि मूल पुस्तकालय का उपयोग करते हैं, तो कोणीय 16 एक त्रुटि फेंकता है, " पुस्तकालय आइवी का समर्थन नहीं करता है "।
अब तक, इस परियोजना में इतने पुराने, अप्रचलित, अप्रबंधित और परित्यक्त निर्भरताएँ हैं कि उन्नयन अपने आप में एक पूरी अलग परियोजना बन सकती है। यह देखने के बाद अपग्रेड करने का प्रयास बंद कर दिया गया है कि केवल एक साफ निर्माण प्राप्त करने के लिए बहुत से बदलाव किए जाने हैं।
क्या एक उद्यम कोणीय अनुप्रयोग को कोणीय 16 में अपग्रेड करना संभव है?
यह संभव है, लेकिन यदि एप्लिकेशन जटिल है, या यदि इसमें बहुत सारे हैं, तो मान लें कि " अभी तक एंगुलर 16 पुस्तकालयों द्वारा समर्थित नहीं है " यह इतना आसान नहीं हो सकता है।
यह निर्धारित करने के लिए कि कौन से पुस्तकालयों को एक संस्करण उन्नयन की आवश्यकता है, और किसको कुछ विशेष उपचार की आवश्यकता हो सकती है (जैसे कार्य कोड निकालना और उस पुस्तकालय के लिए एक आंतरिक संस्करण बनाना) कई संकलन परीक्षण करके शुरू करने के लिए तैयार रहें।
फिर, यदि आप एक साफ निर्माण प्राप्त करने का प्रबंधन करते हैं, तो आपको संभवतः प्रत्येक घटक के लिए सभी दृश्य शैलियों की जांच करने की आवश्यकता होगी (बस अगर कुछ दृष्टिगत रूप से टूटा हुआ है)।
उन्नयन प्रशंसनीय है (संभव से अधिक), लेकिन यह " निर्दोष जीत " नहीं होगी।
मैंने वास्तव में एंगुलर एप्लिकेशन को एंगुलर 16 में अपग्रेड किया।
यह एक एंटरप्राइज़ एप्लिकेशन नहीं है, इसमें टेलविंड और एंगुलर के अलावा कोई बाहरी निर्भरता नहीं है, इसलिए यह इतना आसान है कि अपग्रेड करना लगभग एक सीधा काम था।
वास्तविक उद्यम अनुप्रयोगों पर, सुखद पथ की अपेक्षा न करें, न ही सुखद अंत की। इस कार्य में असफल होने की सम्भावना अधिक होती है।
और ऐसा नहीं है कि मैं एंगुलर 16 में नहीं हूं, मैं वास्तव में सभी घोषित सुविधाओं से प्यार करता हूं, लेकिन इसे अभी जारी किए गए संस्करण में अपग्रेड करना एक दर्द होगा!
प्रारंभिक गोद लेने वाले : खबरदार!