हर नए पेपैल वेब एप्लिकेशन के दिल में टाइपस्क्रिप्ट क्यों है?

हमने हाल ही में सामग्री प्रकाशित की जिसमें एरिक इलियट ने टाइपस्क्रिप्ट की आलोचना की। आज हम आपके ध्यान में केंट डोड्स के लेख का अनुवाद लाते हैं। यहाँ वह इस बारे में बात करता है कि पेपाल ने फ्लो से टाइपस्क्रिप्ट में क्यों स्विच किया।

छवि

प्रागितिहास


मैं पेपाल पर काम करता हूं और पेपाल paypal-scripts लाइब्रेरी में शामिल हूं, जो एक टूलबॉक्स है, जो create-react-app , या angular-cli , या ember-cli से react-scripts की याद दिलाता है। मैंने इस बारे में पहले ही लिख दिया था । इस लाइब्रेरी का आधार पेपल एप्लिकेशन और प्रकाशित मॉड्यूल में उपयोग किए जाने वाले सभी उपकरणों के संयोजन का विचार है। devDependencies paypal-scripts बनाने का लक्ष्य package.json , devDependencies , सभी कॉन्फ़िगरेशन फ़ाइलों से सभी विकास निर्भरताएं, devDependencies लेना है, और यह सब devDependencies अनुभाग में एक प्रविष्टि के लिए कम करना है। और, चूंकि सभी कॉन्फ़िगरेशन एक ही पैकेज में हैं, जिसके निर्माण के दौरान वे बहुत ही विशिष्ट दृष्टिकोण का पालन करते हैं कि क्या अच्छा है, टूल को अद्यतित रखने के लिए, यह केवल एक निर्भरता (वास्तव में - paypal-scripts ) को अपडेट करने के लिए पर्याप्त है। के अपडेट, जिनमें से आमतौर पर अपने आप में कुछ ऐसा नहीं होता है जो कोड के संचालन को बाधित कर सकता है जो उस पर निर्भर करता है। नतीजतन, यह एक निर्भरता को बनाए रखने और शांति से आवेदन विकास में संलग्न होने के लिए पर्याप्त है।

पिछले वर्ष के दौरान, पेपल-प्रोग्रामर का उपयोग पेपाल paypal-scripts साथ काम करने के लिए किया जाता है। यहां, एक नया एप्लिकेशन बनाने के लिए, वेब इंटरफ़ेस में कुछ बटन पर क्लिक करें, जिसके परिणामस्वरूप एक कॉर्पोरेट GitHub रिपॉजिटरी बनाई जाएगी, प्रोजेक्ट परिनियोजन उपकरण, एक सतत एकीकरण प्रणाली, और इसी तरह कॉन्फ़िगर किया जाएगा। ऑटो-जनरेट रिपॉजिटरी sample-app रिपॉजिटरी पर आधारित है।

अभी पिछले हफ्ते, इसमें मेरा जोड़ शामिल था, इसमें paypal-script का उपयोग करने के लिए डिज़ाइन किया गया था। इसका मतलब यह है कि पेपाल में हर नए एप्लिकेशन के दिल में आधुनिक तकनीकों और उपकरणों के आधार पर एक ढांचा होगा, जिसके अद्यतन के लिए इस एप्लिकेशन के डेवलपर को चिंता करने की आवश्यकता नहीं है। अन्य बातों के अलावा, इस तरह के एक आवेदन को टाइपस्क्रिप्ट का उपयोग करके सांख्यिकीय रूप से टाइप किया जाएगा और जेस्ट टूल का उपयोग करके परीक्षण किया जाएगा।

ईमानदारी से, यह मेरे करियर का मैग्नम ओपस बन गया है। मैंने नहीं सोचा था कि किसी दिन मैं पेपाल में समान स्तर हासिल कर सकूंगा। इस परियोजना का बहुत बड़ा प्रभाव है, और मैं इतने बड़े पैमाने पर काम करने के अवसर के लिए पेपाल के लिए आभारी हूं।

इसलिए, मैंने आपको मामलों के पाठ्यक्रम से परिचित कराया, अब टाइपस्क्रिप्ट के बारे में बात करते हैं।

दिसंबर के मध्य में, मैंने sample-app में paypal-scripts को एकीकृत करने पर काम किया। मैंने pp-react पर भी काम किया (और काम करना जारी रखा), जो पुन: उपयोग के लिए उपयुक्त घटकों (बटन, खिड़कियां, शैली) का एक पुस्तकालय है। चूंकि paypal-scripts उन मॉड्यूल का समर्थन करती है जो प्रकाशित हो सकते हैं, इसलिए मैंने pp-react बनाने के लिए react-scripts का उपयोग किया। एक महीने पहले, paypal-scripts लाइब्रेरी में फ्लो के लिए समर्थन शामिल था। इस तरह के समर्थन को बेबेल के लिए इस पुस्तकालय में जोड़ना बहुत आसान था।

12 दिसंबर को, जब मैं pp-react पर काम कर रहा था और फ़्लो सपोर्ट के संदर्भ में sample-app का नया संस्करण, मुझे लगा कि मैं पहले से ही फ़्लो में बहुत थक गया था (मैं नीचे इस बारे में अधिक विस्तार से चर्चा करूंगा) और एक अप्रत्याशित निर्णय लिया। मैंने एक सहकर्मी को पत्र लिखकर उनसे पूछा कि वह कैसे देखता है कि मैं sample-app में टाइपस्क्रिप्ट को बनाने की कोशिश करूँगा। उसने उत्तर दिया: "हाँ, करो।" फिर मैंने #paypal-scripts स्लैक चैनल पर एक सर्वेक्षण किया, जिसमें पता चला कि इसके सभी प्रतिभागी मेरे विचार का समर्थन करते हैं। मेरे लिए, यह सब काम करने के लिए पर्याप्त था। लगभग एक हफ्ते बाद, मैंने पूरी तरह से पेपाल paypal-scripts को फ्लो सपोर्ट से टाइपस्क्रिप्ट सपोर्ट में बदल दिया। इस समय का अधिकांश समय .tsx फ़ाइल .ts को पहचानने के लिए सभी उपकरणों को पढ़ाने पर खर्च किया गया था, और .tsx paypal-scripts पैकेज को स्वयं का परीक्षण करने की अनुमति देने पर, जो काफी मुश्किल काम था। फिर मैंने sample-app रिपॉजिटरी में पीआर पर काम करते हुए कई दिन बिताए, जिसका उद्देश्य नई बेहतर paypal-scripts लाइब्रेरी का उपयोग करना था, और .js फ़ाइलों से .ts और पर स्विच करना था। tsx फाइलें। तब छुट्टियां थीं, और तब मेरे पीआर को मंजूरी दी गई थी। परिणामस्वरूप, अब हर नई परियोजना में पेपल स्टेटिक टाइपस्क्रिप्ट टाइपिंग का उपयोग करता है।

बेशक, किसी के द्वारा एक नई परियोजना बनाने के बाद, वह जो चाहे कर सकता है। कहते हैं, आप सभी बॉयलरप्लेट कोड को हटा सकते हैं और इसे एल्म, या किसी अन्य चीज़ पर लिख सकते हैं। यह पूरी तरह से सामान्य है। लेकिन अधिकांश परियोजनाओं के लेखक उन तकनीकों का पालन करते हैं जो तथाकथित " डिफ़ॉल्ट प्रभाव " के कारण उन्हें बनाने के लिए उपयोग किए गए थे।

मैं इतने लंबे समय के लिए टाइपस्क्रिप्ट क्यों गया था?


इस अनुभाग के शीर्षक में प्रस्तुत प्रश्न अक्सर टाइपस्क्रिप्ट प्रशंसकों द्वारा पूछा गया था। तथ्य यह है कि मैं लंबे समय से टाइपस्क्रिप्ट से परिचित हूं, लेकिन इस भाषा के साथ मेरा संबंध कुछ समय से विकसित नहीं हुआ है। इसलिए, मुझे याद है कि कैसे, 2013 के आसपास, एक सहकर्मी ने सुझाव दिया कि मैं टाइपस्क्रिप्ट में लगभग 500 हजार लाइनों की मात्रा के साथ कोड का अनुवाद करता हूं। तब मैंने इस प्रस्ताव को अस्वीकार कर दिया था, लेकिन मुझे विशेष रूप से पछतावा नहीं है, क्योंकि उन दिनों टीएस काफी युवा भाषा थी। और एक बार मैंने टाइपर्सस्क्रिप्ट के निर्माता एंडर्स हेल्सबर्ग का भी साक्षात्कार लिया।

इसीलिए मैं इस समय टाइपस्क्रिप्ट से दूर रहा।

1 कारण संख्या 1। बाबेल और ईएसलिंट-आधारित कार्य वातावरण को नष्ट करने का डर


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

प्रवाह में, मैं विशेष रूप से इस तथ्य को पसंद करता हूं कि इसे अपने वर्कफ़्लो में शामिल करने के लिए, आपको केवल कुछ सरल चरणों को निष्पादित करने की आवश्यकता है:

  1. बाबेल को संबंधित सिंटैक्स के लिए एक प्रीसेट को समर्थन से जोड़ना आवश्यक है।
  2. आपको प्रत्येक फ़ाइल की शुरुआत में // @flow निर्माण को जोड़ने की आवश्यकता है, जिस प्रकार की जाँच जिसमें आप व्यवस्थित करना चाहते हैं (ESLint के लिए एक प्लगइन है जो आपको यह जाँचने की अनुमति देता है)।
  3. प्रोजेक्ट में एक स्क्रिप्ट जोड़ें जो आपको कोड बेस में प्रकारों की जांच करने के लिए फ्लो चलाने की अनुमति देता है।

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

अब सब कुछ हमेशा की तरह काम करना जारी है। बाबेल 7 के लिए धन्यवाद (विशेष रूप से, हम @ बाबेल / प्रीसेट-टाइपस्क्रिप्ट के बारे में बात कर रहे हैं), आप परिचित टूल को सहेज सकते हैं और इसके अलावा, अपने निपटान में टाइपस्क्रिप्ट की अधिकांश विशेषताओं को प्राप्त कर सकते हैं। एक्सटेंशन के साथ फ़ाइलों को स्वीकार करने के लिए उपकरण बनाना मुख्य समस्या है। ts और .tsx , लेकिन, सौभाग्य से, यह समस्या हल हो गई है।

2 कारण संख्या 2। योगदानकर्ताओं को प्रोजेक्ट में योगदान देने के लिए टाइपस्क्रिप्ट सीखना होगा।


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

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

3 कारण संख्या 3। पावरफुल फ्लो टाइप इन्वेंशन सिस्टम


मैंने इस पोस्ट को पढ़ा, और मुझे यह बहुत पसंद आया। विशेष रूप से इसकी अंतिम पंक्ति, जिसके अनुसार फ्लो प्रकारों का उपयोग करते समय त्रुटि संदेशों को और अधिक सुखद बनाने के लिए जोड़ा जाता है, न कि उन्हें पहचानने के लिए।

तो यह है। इन दिनों, टाइप टाइपस्क्रिप्ट की तुलना में फ्लो में अधिक शक्तिशाली प्रकार का अनुमान प्रणाली है, और इसने मुझे प्रोत्साहित किया है।

4 कारण संख्या 4। फ्लो, रिएक्ट की तरह, मूल रूप से फेसबुक से


मैं सच के खिलाफ पाप करूंगा यदि मैं कहता हूं कि मैंने बहुत व्यापक गलतफहमी के कारण आत्महत्या नहीं की, मेरा मानना ​​है कि अगर एक कंपनी ने कुछ भव्य किया, तो बाकी सब कुछ जो वह करता है वह स्वचालित रूप से उसी उच्च स्तर पर होगा। यह बिल्कुल गारंटी नहीं है। मेरे पास यहां जोड़ने के लिए और कुछ नहीं है।

5 कारण संख्या 5। टाइपस्क्रिप्ट कट्टरपंथी


मुझे लगता है कि हर कोई जानता है कि अगर कोई वास्तव में एक निश्चित तकनीक से मोहित हो जाता है, तो वह बिना रुके, उसके बारे में हर किसी को बताता है। क्या कोई यहाँ विम का उपयोग कर रहा है ? और टाइपस्क्रिप्ट अनुयायी कोई अपवाद नहीं हैं।

टाइपस्क्रिप्ट समुदाय, वैसे, महान लोगों से भरा है। दयालु, मदद करने के लिए तैयार, उत्साही, मैत्रीपूर्ण। लेकिन मुझे ऐसे टीएस प्रेमियों से मिलना था जो किसी व्यक्ति को केवल इसलिए मूर्ख कहते थे क्योंकि वह टाइपस्क्रिप्ट का उपयोग नहीं करता है, या इसे नहीं समझता है, या कुछ और का उपयोग करता है। वे वार्ताकार को समझने की क्षमता की कमी का प्रदर्शन करते हैं, और उनकी स्थिति स्नोबेरी को दूर करती है। यह वह समुदाय नहीं है जिसका मैं हिस्सा बनना चाहूंगा। मेरा मतलब है, किसी के द्वारा चुनी गई तकनीक के कारण उत्साह अद्भुत है, लेकिन अगर यह इतना आगे बढ़ जाता है कि इस तकनीक का एक प्रशंसक उन लोगों पर अत्याचार करना शुरू कर देता है जो कुछ और चुनते हैं, तो यह पहले से ही बहुत दुखद है

मुझे अभी भी इस बारे में कुछ चिंताएं हैं। लेकिन मुझे उम्मीद है कि साथ मिलकर हम टाइपस्क्रिप्ट समुदाय को और सकारात्मक बना देंगे।

अब चूंकि मैंने उन कारणों के बारे में बात की है, जिनकी वजह से मुझे टाइपस्क्रिप्ट पर स्विच करने की कोई जल्दी नहीं थी, मैं इस बारे में बात करूँगा कि मुझे फ्लो में क्या सूट नहीं करता।

प्रवाह समस्याएँ


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

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

जब मैंने नवंबर में इस ट्वीट को देखा, तो उन्होंने व्यक्त किया कि मैं पहले से क्या सोच रहा था; फ्लो से टाइपस्क्रिप्ट पर स्विच करने के बारे में एक छोटी कहानी मेरी स्थिति की दृष्टि से मेल खाती है। ईमानदारी से, मैं यह सोचना बंद नहीं कर सका कि टाइपस्क्रिप्ट को कैसे ठीक से लिया जाए। नतीजतन, मैंने बस यही किया और मैं इसके बारे में बहुत खुश हूं।

क्यू एंड ए


▍ आप TSLint का उपयोग क्यों नहीं कर रहे हैं?


वास्तव में, मैंने paypal-script में TSLint समर्थन लागू किया। यह मेरे द्वारा अर्जित पहली स्क्रिप्ट में से एक थी। मैं यह तय करने वाला था कि क्या परियोजना में tsconfig.json फ़ाइल है या नहीं, इस आधार पर TSLint या ESLint का उपयोग करना है। लेकिन फिर मुझे याद आया कि हमारे पास अपने स्वयं के डिजाइन के कुछ ESLint प्लगइन्स थे (उदाहरण के लिए, अंतर्राष्ट्रीयकरण की जांच करने के लिए), जो मैं TSLint के प्लगइन्स के रूप में समय पुनर्लेखन को बर्बाद नहीं करना चाहता था। इसके अलावा, TSLint कमांड लाइन इंटरफ़ेस ESLint की तुलना में कम शक्तिशाली है, और यह paypal-scripts साथ काम करने के लिए अच्छी तरह से अनुकूल नहीं है। शायद थोड़ी देर बाद मैं TSLint पर करीब से नज़र डालूंगा।

हां, मैं यह नोट करना चाहता हूं कि ESLint समुदाय अभी भी TSLint समुदाय से बहुत बड़ा है। इसके अलावा, मैं धीरे-धीरे महसूस करता हूं कि एक अच्छा प्रकार नियंत्रण प्रणाली लाइनिंग प्लगइन्स को बेकार बनाता है। इस बीच, मैं टाइपस्क्रिप्ट ESLint का उपयोग कर रहा हूं, और मुझे जो मिल रहा है वह बहुत अच्छा लग रहा है। यहाँ इस विषय पर मेरा वीडियो है।

और वैसे, मुझे यह महसूस होता है कि टाइपस्क्रिप्ट टीम ESLint की ओर झुक रही है, इसलिए मुझे लगता है कि मैंने सही विकल्प बनाया है।

’आपने कारण क्यों नहीं चुना?


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

शायद अगर मैंने रीज़न चुना, तो मेरा पीआर कभी भी sample-app रिपॉजिटरी में खत्म नहीं होगा। सहकर्मियों को उपयोग करने के लिए प्रोत्साहित करना एक बात है, संक्षेप में, "टाइप किए गए जावास्क्रिप्ट" कहा जा सकता है (विशेषकर यदि उन्हें निश्चित कॉन्फ़िगरेशन के लिए समर्थन की आवश्यकता नहीं है), और यदि आप सहयोगियों को उपयोग करने के लिए प्रोत्साहित करने की कोशिश करते हैं तो पूरी तरह से अलग बातचीत होगी। एक पूरी तरह से अलग भाषा और पूरी तरह से अलग पारिस्थितिकी तंत्र (और इससे कोई फर्क नहीं पड़ता कि यह भाषा JS और npm के साथ कितनी अच्छी तरह से मेल खाती है)।

परिणाम


अब, मैं उन सभी ट्विटर उपयोगकर्ताओं को धन्यवाद देना चाहता हूं जिन्होंने टाइपस्क्रिप्ट की मेरी दृष्टि को प्रभावित किया। जैसा कि मैंने कहा, यह तथ्य कि पेपाल paypal-scripts लाइब्रेरी पेपल में sample-app रिपॉजिटरी में मिला है, शायद मेरे करियर की मुख्य उपलब्धि है। और मुझे विश्वास है कि अब यह तथ्य कि कंपनी में सभी नए अनुप्रयोगों के टेम्प्लेट डिफ़ॉल्ट रूप से टाइपस्क्रिप्ट समर्थन से लैस हैं, सभी पेपैल कर्मचारियों के लिए एक बहुत बड़ा धन है। मुझे बेहद खुशी है कि मैंने टाइपस्क्रिप्ट चुना।

प्रिय पाठकों! क्या आपको लगता है कि फ्लो का इस्तेमाल करने वालों को टाइपस्क्रिप्ट की दिशा में देखना चाहिए?

Source: https://habr.com/ru/post/hi437986/


All Articles