Transcript
00:00:00BUN का सबसे बड़ा और सबसे विवादास्पद अपडेट आ गया है, BUN 1.4, यानी रस्ट (Rust) रीराइट।
00:00:04खैर, रीराइट के इस ड्रामे पर मैं पहले ही एक वीडियो बना चुका हूँ, तो आइए सीधे नई चीज़ों पर ध्यान देते हैं,
00:00:07क्योंकि मुझे इनमें से कुछ चीज़ें वाकई पसंद आई हैं, खासकर स्टैंडर्ड लाइब्रेरी वाली,
00:00:11क्योंकि अब इसमें एक इन-बिल्ट हेडलेस ब्राउज़र, इमेज लाइब्रेरी, स्यूडो-टर्मिनल, मार्कडाउन,
00:00:15क्रॉनजॉब, टेबल्स और बहुत कुछ है, जो आपकी इस्तेमाल की जा रही 15 डिपेंडencies की जगह ले लेगा।
00:00:19पिछले कुछ सालों में, जावास्क्रिप्ट की सबसे बड़ी शिकायतों में से एक स्टैंडर्ड लाइब्रेरी का न होना रहा है,
00:00:23और BUN इस कमी को दूर कर रहा है, जो आए दिन होने वाले सप्लाई चेन हमलों की दुनिया में एक बहुत अच्छा कदम है।
00:00:30सबसे पहले, हम Playwright और Puppeteer को अनइंस्टॉल करके उसकी जगह BUN WebView का इस्तेमाल कर सकते हैं।
00:00:37यहाँ दिए गए इस कोड से, मैं एक हेडलेस ब्राउज़र को नियंत्रित कर सकता हूँ, सब्सक्राइब बटन ढूँढ सकता हूँ और उस पर क्लिक कर सकता हूँ,
00:00:41हालाँकि मैं इसे अभी आपकी मशीन पर नहीं चला सकता, इसलिए आपको मेरे लिए सब्सक्राइब पर क्लिक करना होगा।
00:00:44क्लिक, टाइप, प्रेस और स्क्रॉल जैसे सभी इनपुट तरीके नेटिव ब्राउज़र इवेंट्स को ट्रिगर करते हैं,
00:00:48इसलिए पेज को यह सोचना चाहिए कि आप एक असली यूजर हैं। Mac पर, यह सिस्टम के webkit का इस्तेमाल करता है,
00:00:52यानी Safari के इंजन का, जिसका मतलब है कि कुछ भी इंस्टॉल करने की जरूरत नहीं है, लेकिन अगर आप क्रोम इंस्टेंस चाहते हैं,
00:00:56तो आप backend विकल्प को Chrome पर सेट कर सकते हैं, और इससे पहले से इंस्टॉल Chrome या Chromium इंस्टेंस का इस्तेमाल होगा,
00:01:01जो आप तब करेंगे जब आप Windows या Linux का उपयोग कर रहे हों। यह वास्तव में एक हेडलेस क्रोम
00:01:04सबप्रोसेस चला सकता है, या यह पहले से चल रहे क्रोम इंस्टेंस से कनेक्ट हो सकता है, इसलिए यहाँ दिए गए इस कोड का उपयोग करके,
00:01:09मैं अपने Mac पर खुले हुए क्रोम वर्शन को चला सकता हूँ, वो भी पूरी तरह से BUN से। इसके अलावा,
00:01:13आप पेज पर जावास्क्रिप्ट चलाने के लिए Evaluate का भी उपयोग कर सकते हैं, और नेटिव
00:01:17जावास्क्रिप्ट वैल्यू के रूप में परिणाम प्राप्त कर सकते हैं, और यदि आपके किसी मनचाه फीचर के लिए कोई API नहीं है, तो आप
00:01:21रॉ CDP कमांड्स पर जा सकते हैं। मैं देख सकता हूँ कि यह कुछ हल्के-फुल्के ब्राउज़र ऑटोमेशन के लिए काफी अच्छा है,
00:01:25मुझे नहीं लगता कि यह अभी Playwright की पूरी तरह से जगह लेता है, इसमें टेस्ट रनर या ट्रेस व्यूअर नहीं है,
00:01:29लेकिन स्क्रैपिंग या कंप्यूटर यूज़ स्क्रिप्ट्स जैसी चीज़ों के लिए, यह कोई बुरा विकल्प नहीं है।
00:01:32अगला, आइए Sharp को अनइंस्टॉल करें और उसकी जगह BUN.image का इस्तेमाल करें। यह एक पूर्ण इमेज लाइब्रेरी है,
00:01:37जो हमें एक फाइल लेने, उस पर .image कॉल करने, और फिर रिसाइज करने, घुमाने जैसे ऑपरेशंस को चेन करने देती है,
00:01:42फ्लिप करने, फ्लॉप करने, चमक (brightness) बदलने, तीखापन (sharpness) बदलने, और इसे ढेरों अलग-अलग
00:01:46इमेज फॉर्मेट में बदलने की अनुमति देती है। यह आपको पिक्सेल डेटा को डिकोड किए बिना चौड़ाई, ऊँचाई और फॉर्मेट
00:01:50जैसी मेटाडेटा पढ़ने की भी सुविधा देता है। एक और बेहतरीन विकल्प जो मुझे वाकई बहुत पसंद आया है, वह है
00:01:54प्लेसहोल्डर इमेज बनाने की क्षमता। यह कम क्वालिटी वाला वर्जन है जिसे असली इमेज लोड होने से पहले आप HTML में इनलाइन कर सकते हैं।
00:01:59BUN.image उन फीचर्स में से एक है जिसके इस्तेमाल को लेकर मैं सबसे ज्यादा उत्साहित हूँ क्योंकि मुझे पहले
00:02:04डिप्लॉयमेंट और बिल्ड के दौरान Sharp से जुड़ी समस्याएं आ चुकी हैं। अब अगर मैं BUN का उपयोग करता हूँ,
00:02:08तो मुझे इसके बारे में सोचने की जरूरत नहीं है। मुझे अब Marked के बारे में भी सोचने की जरूरत नहीं है क्योंकि हम अब
00:02:12मार्कडाउन को पार्स करने के लिए बस BUN.markdown का उपयोग कर सकते हैं। इसमें केवल तीन API हैं।
00:02:16BUN.markdown.html मार्कडाउन को HTML स्ट्रिंग में रेंडर करता है। BUN.markdown.render मार्कडाउन को प्रत्येक
00:02:22एलिमेंट के लिए कस्टम कॉलबैक के साथ रेंडर करता है। इससे आपको कस्टम क्लास के साथ HTML रेंडर करने की फ्लेक्सिबिलिटी मिलती है,
00:02:27ANSI टर्मिनल आउटपुट, या कोई अन्य स्ट्रिंग फॉर्मेट। BUN.markdown.react मार्कडाउन को React.jsx में रेंडर करता है,
00:02:33और यह आपको प्रत्येक एलिमेंट के लिए अपनी पसंद का कोई भी कंपोनेंट पास करने की भी अनुमति देता है, जिससे आप बेहद
00:02:37अच्छी तरह से स्टाइल किया हुआ मार्कडाउन प्राप्त कर सकते हैं। इसमें कई ऐसे विकल्प भी हैं जिन्हें आप अपनी जरूरत के अनुसार
00:02:41मार्कडाउन फीचर्स को नियंत्रित करने के लिए टॉगल कर सकते हैं। आप गिटहब फॉर्मेटेड टेबल्स, ऑटो लिंक्स जैसी चीजें रख सकते हैं,
00:02:45हेडिंग आईडी और विकी लिंक्स, हालांकि एक चेतावनी जो वे बताते हैं वह यह है कि HTML आउटपुट सैनिटाइज नहीं किया जाता है,
00:02:50इसलिए रॉ HTML, इवेंट हेडर एट्रीब्यूट्स, जावास्क्रिप्ट, ये सभी सीधे पास हो जाते हैं, इसलिए यदि आप
00:02:54यूजर्स द्वारा लिखे गए मार्कडाउन को रेंडर कर रहे हैं, तो उसे हल करना अभी भी आपकी ही जिम्मेदारी है। इसके बावजूद, आजकल बहुत
00:02:59सारा मार्कडाउन जनरेट हो रहा है जिसे देखते हुए यह मुझे एक काफी अच्छा एडिशन लगता है। आगे बढ़ते हुए, आप
00:03:03अब Node.pty को अनइंस्टॉल कर सकते हैं। BUN.terminal आपको एक इन-बिल्ट स्यूडो टर्मिनल देता है, जिससे आप जावास्क्रिप्ट से
00:03:08Bash, Vim या HTOP चला सकते हैं। यदि आपने कभी किसी इलेक्ट्रॉन ऐप के अंदर टर्मिनल शिप करने की कोशिश की है,
00:03:12तो आप उसकी परेशानी जानते हैं। यह असल में BUN.spawn में एक नया एडिशन है। आप इसे टर्मिनल विकल्प पास करते हैं और यह
00:03:17एक स्यूडो टर्मिनल से जुड़े सबप्रोसेस को स्पॉन करता है। सबप्रोसेस को एक वास्तविक टर्मिनल दिखाई देता है, जो
00:03:22रंग-बिरंगे आउटपुट, कर्सर मूवमेंट और इंटरैक्टिव प्रॉम्प्ट्स को सक्षम बनाता है, और एक बार जब आपके पास टर्मिनल आ जाता है, तो आप
00:03:26उस टर्मिनल में डेटा लिख सकते हैं, टर्मिनल का आकार बदल सकते हैं, टर्मिनल बंद कर सकते हैं और बहुत कुछ कर सकते हैं। आप अपना खुद का
00:03:31टर्मिनल भी बना सकते हैं, जिससे आप इसे सबप्रोसेस में दोबारा इस्तेमाल कर सकते हैं। मैं इन सभी फीचर्स में एक पैटर्न देखना शुरू कर रहा हूँ।
00:03:35वे ऐसी चीजें लगती हैं जिनका इस्तेमाल Claude Code करता होगा, इसलिए काश वे उसे ओपन-सोर्स कर देते
00:03:39ताकि हम इन फीचर्स को बड़े पैमाने पर इस्तेमाल होते हुए देख पाते। अगली डिपेंडेंसी जिसे हम
00:03:43अनइंस्टॉल कर रहे हैं वह Node.cron है, क्योंकि अब हम केवल BUN.cron का उपयोग कर सकते हैं। यदि आप इसे कोई फंक्शन पास करते हैं,
00:03:47तो यह बिना किसी सिस्टम क्रॉन के सीधे इवेंट लूप पर चलेगा, लेकिन यदि आप इसे कोई स्क्रिप्ट पास करते हैं,
00:03:51तो यह OS-level की क्रॉन जॉब रजिस्टर करेगा जो वास्तव में Linux पर crontab, macOS पर launchd,
00:03:56और Windows पर टास्क शेड्यूलर का उपयोग करती है। आप मानक क्रॉन सिंटैक्स का उपयोग कर सकते हैं, जिसमें नाम वाले दिन और daily जैसे हेल्पर्स शामिल हैं,
00:04:01और यह उस क्रॉन सिंटैक्स को पार्स करने का भी समर्थन करता है, जो सिस्टम के स्थानीय समय क्षेत्र में अगली मेल खाने वाली तारीख लौटाएगा।
00:04:05और समय क्षेत्रों की बात करें तो, डिफ़ॉल्ट रूप से सभी जॉब्स स्थानीय समय में चलती हैं,
00:04:11लेकिन इसमें इसे बदलने के लिए स्पष्ट विकल्प हैं, ताकि आप आश्वस्त हो सकें कि यह कब चलने वाला है।
00:04:15मेरे शेड्यूल में अगला काम आपको concurrently या npm run all को अनइंस्टॉल करने के लिए कहना है, क्योंकि अब BUN के पास
00:04:20अपना खुद का parallel विकल्प है। इस फ्लैग का उपयोग करने से आप एक साथ कई package.json स्क्रिप्ट चला सकते हैं,
00:04:24और आउटपुट के आगे उस स्क्रिप्ट का नाम लिखा होता है जिससे वह आया है। यह आपको स्क्रिप्ट के नामों के लिए ग्लोब मैच
00:04:28का उपयोग करने की अनुमति भी देता है, इसमें आपके वर्कस्पेस के भीतर किस पैकेज में कमांड चलानी है, इसके लिए एक फिल्टर है,
00:04:32और इसमें एक विकल्प भी है जो अन्य स्क्रिप्ट्स को चालू रखने देता है यदि उनमें से किसी में त्रुटि आ जाए। यह सिर्फ
00:04:37concurrent नहीं होना चाहिए, आप समान प्रीफ़िक्स वाले आउटपुट और फ़िल्टरिंग के साथ एक-एक करके स्क्रिप्ट चलाने के लिए sequential का भी उपयोग कर सकते हैं।
00:04:41यह शायद वह फीचर है जिसे मैं खुद सबसे ज्यादा इस्तेमाल करते हुए देखता हूँ। हमारी अगली अनइंस्टॉल
00:04:45कोई भी tar आर्काइव लाइब्रेरी है। BUN.archive tar और gzip का एक तेज नेटिव इम्प्लीमेंटेशन है।
00:04:50इसे बनाना एक ऐसा ऑब्जेक्ट है जहाँ की (keys) पाथ हैं और वैल्यू कंटेंट्स हैं, और कंटेंट्स
00:04:55स्ट्रिंग, ब्लॉब, UIN8 ऐरे, या ऐरे बफर से लेकर कुछ भी हो सकते हैं। संपीड़न (compression) के लिए,
00:05:00आप gzip पर सेट compress विकल्प का भी उपयोग कर सकते हैं, और 1 से 12 तक का स्तर चुन सकते हैं। जाहिर है कि आप
00:05:05फिर इन्हें ग्लोब पैटर्न जैसे विकल्पों के साथ निकाल सकते हैं ताकि केवल विशिष्ट फाइलें निकाली जा सकें, और एक फीचर जिसे मैं वास्तव में
00:05:10पसंद करता हूँ वह यह है कि आप किसी आर्काइव को बिना निकाले पढ़ सकते हैं। यहाँ दिया गया यह कोड npm
00:05:14रजिस्ट्री से lodash खींच सकता है और बिना एक भी फाइल निकाले उसका package.json पढ़ सकता है। अब तक हमने
00:05:19लगभग 7 npm पैकेजों की जरूरत को खत्म कर दिया है, और अभी और भी बाकी हैं, हालांकि ये छोटे फीचर्स हैं इसलिए हम
00:05:24इन्हें तेजी से पूरा कर सकते हैं। सबसे पहले, BUN.serve अब स्टैटिक फाइलें सर्व कर सकता है, जिससे serve static की जरूरत
00:05:28खत्म हो जाती है, और यह आपकी वेबसाइट के उस पब्लिक फोल्डर के लिए बहुत बढ़िया है। दूसरा, BUN ने
00:05:33JSON5 और XML के लिए समर्थन जोड़ा है, ताकि आपको उनके पैकेजों की अब आवश्यकता न पड़े। आप BUN में दोनों
00:05:38फॉर्मेट्स को इम्पोर्ट, पार्स और स्ट्रिंगीफाई कर सकते हैं। आखिरी तीन टर्मिनल के लिए हेल्पर्स हैं। हमारे पास BUN.sliceansy, BUN.wrapansy,
00:05:43और BUN.stringwidth हैं, जो आपको टर्मिनल कॉलम के हिसाब से स्लाइसिंग, रैपिंग और माप देते हैं,
00:05:47जो sliceansy, CLI truncate, wrapansy, और stringwidth जैसे पैकेजों की आवश्यकता को प्रतिस्थापित करते हैं।
00:05:52कुल मिलाकर, लगभग 15 पैकेज जा चुके हैं, और मैंने इस रिलीज का केवल आधा हिस्सा ही कवर किया है।
00:05:56इस ब्लॉग पोस्ट का सार यह है कि बहुत सी चीजें तेज हो गई हैं, CPU का उपयोग सुधर गया है, स्टार्टअप
00:06:01तेज हो गया है, और इन सभी फीचर्स के बावजूद, बाइनरी 17% छोटी हो गई है। ओह, और यह Rust में लिखा गया है।
00:06:06उल्लेख करने लायक एक बोनस फीचर यह है कि BUN.install को एक ग्लोबल वर्चुअल स्टोर मिल गया है।
00:06:10यदि आप आइसोलेटेड लिंकर को सक्षम करते हैं, तो पैकेज आपकी मशीन पर एक बार निकाले जाते हैं और आपके
00:06:14node_modules से सिमलंक किए जाते हैं, बजाए इसके कि उन्हें हर एक प्रोजेक्ट में अलग से कॉपी किया जाए। इससे
00:06:19यह तेज हो जाना चाहिए और यदि आपके पास ढेरों प्रोजेक्ट हैं तो जगह भी बचाएगा। तो अब BUN के बारे में आपकी क्या राय है?
00:06:23क्या आप इसका उपयोग करते हैं? क्या आप इनमें से किसी भी फीचर का उपयोग करेंगे? मुझे नीचे कमेंट सेक्शन में बताएं,
00:06:27वहाँ रुकें, सब्सक्राइब करें, और हमेशा की तरह, अगले वीडियो में मिलते हैं।
00:06:36मैं आपसे अगली बार मिलूँगा।
Community Posts
No posts yet. Be the first to write about this video!
Write about this video