Transcript
00:00:00यह Nub है, एक ऑल-इन-वन जावास्क्रिप्ट टूलकिट जो Node को रिप्लेस करने के बजाय उसके ऊपर काम करता है।
00:00:04यह उन सभी टूल्स को रिप्लेस कर देता है जिनका इस्तेमाल आप अभी कर रहे हैं, जैसे पैकेज मैनेजर जो
00:00:08pnpm से पांच गुना तेज़ है, और टाइपस्क्रिप्ट रनर जो TSX को रिप्लेस कर सकता है,
00:00:13और यहाँ तक कि एक Node वर्ज़न मैनेजर भी। इसमें Bun के बेहतरीन फीचर्स हैं, लेकिन स्टॉक Node.js के ऊपर,
00:00:17और शायद यही वजह है कि Nub असल में Bun का उल्टा नाम है।
00:00:21मुझे पता है जावास्क्रिप्ट डेवलपर्स को चीज़ें फिर से बनाना पसंद है, लेकिन यह किसी ऐरे-गैरे इंसान का
00:00:25प्रोजेक्ट नहीं है। इसे Colin ने बनाया है, जो Zod के निर्माता हैं, और उन्होंने ही TRPC का
00:00:29प्रूफ ऑफ कांसेप्ट बनाया था, और उन्होंने Bun में भी काम किया है। तो चलिए सीधे शुरू करते हैं और इसे देखते हैं।
00:00:38तो Nub एक सिंगल Rust बाइनरी है, और यह Mac, Windows और Linux पर काम करता है, और जैसा कि मैंने इंट्रो में दिखाया,
00:00:44ये बस कुछ टूल्स हैं जिन्हें यह रिप्लेस कर सकता है। यह एक फ़ाइल रनर, एक स्क्रिप्ट रनर,
00:00:47पैकेज रनर, पैकेज मैनेजर और Node वर्ज़न मैनेजर है। तो चलिए इनमें से हर एक को देखते हैं।
00:00:52सबसे पहले, फ़ाइल रनर, और अकेले इसी में बहुत सारे फीचर्स हैं। फ़ाइल रनर पूरी
00:00:56टाइपस्क्रिप्ट को सपोर्ट करता है, सिर्फ़ टाइप स्ट्रिपिंग नहीं जैसा कि Node करता है, इसलिए यह TSX या TSNode जैसे टूल को रिप्लेस कर सकता है।
00:01:02और यहाँ हम देख सकते हैं कि मेरे पास एक टाइपस्क्रिप्ट फ़ाइल है जिसमें enums, namespaces, और साथ ही param
00:01:06properties हैं, और यह ऐसी चीज़ नहीं है जिसे Node नॉर्मली चला सके। अगर मैं सीधे Nub रन करता हूँ, और फिर वो
00:01:11फ़ाइल जिसे मैं चलाना चाहता हूँ, तो आप देख सकते हैं कि यह बिल्कुल सही से चलती है, जहाँ यह Node पर फ़ेल हो जाती।
00:01:15तो अगर मैं यहाँ Nub को Node से रिप्लेस करूँ, तो हम देख सकते हैं कि हमें अनसपोर्टेड टाइपस्क्रिप्ट सिंटैक्स का एरर मिलता है,
00:01:20क्योंकि इसे namespace या enum पसंद नहीं है। फ़ाइल रनर .env जैसे टूल्स को भी रिप्लेस कर सकता है,
00:01:24जो एनवायरनमेंट वेरिएबल्स को ऑटोमैटिकली इम्पोर्ट करता है। यह .env फ़ाइलों, .env local, और Node
00:01:29एनवायरनमेंट फ़ाइलों को भी सपोर्ट करता है, और इसमें ऑटोमैटिक वेरिएबल एक्सपेंशन भी है। तो नीचे हमारे पास एक
00:01:33वेरिएबल हो सकता है जो अन्य एनवायरनमेंट वेरिएबल्स से बना है। तो हमारे पास यहाँ डेटाबेस यूज़र और
00:01:37डेटाबेस होस्ट है। अगर मैं अब इस फ़ाइल को Nub के साथ रन करता हूँ, तो आप देख सकते हैं कि यह उन एनवायरनमेंट
00:01:41वेरियबल्स को मेरे लिए इम्पोर्ट करता है, और इसने बाकी एनवायरनमेंट वेरिएबल वैल्यूज़ का इस्तेमाल करके मेरा हेल्थ चेक URL बना दिया है।
00:01:46आप यह भी देख सकते हैं कि मेरी API की (key) असल में उस की से मैच नहीं करती जो मेरे पास यहाँ .env में है।
00:01:50ऐसा इसलिए है क्योंकि .env local को हमेशा प्राथमिकता मिलेगी, और इसमें मेरे पास API की
00:01:54“subscribe to better stack” पर सेट है। यह कुछ ऐसा है जो आपको AI और डेवलपर न्यूज़ से अपडेट रहने के लिए
00:01:58ज़ूरूर करना चाहिए। कृपया सब्सक्राइब करें, इससे बहुत मदद मिलती है। इसके बाद मैं आगे बढ़ूँगा
00:02:02और nub और फिर source/index.tsx रन करूँगा, और हम देख सकते हैं कि यहाँ सब कुछ काम कर रहा है। यह
00:02:07मेरा nub किचन सिंक है। उस फ़ाइल के कोड में, मैं बहुत सारे फीचर्स का इस्तेमाल कर रहा हूँ जो nub फ़ाइल रनर हमें देता है।
00:02:12पहला फीचर यह है कि हम JSON फ़ाइलों के साथ-साथ YAML,
00:02:15HTML, और यहाँ तक कि टेक्स्ट फ़ाइलों को भी इम्पोर्ट कर सकते हैं, और यह tsconfig paths जैसे टूल को भी रिप्लेस कर सकता है। तो जो पाथ मैंने
00:02:20यहाँ @config के साथ सेट किए हैं, जिसे मैंने अपने tsconfig में सेट किया था, यह आगे बढ़ेगा और यह सुनिश्चित करेगा कि
00:02:24Node द्वारा इन्हें ठीक से रिज़ॉल्व किया जाए। इसमें सर्विस और सील्ड की तरह डेकोरेटर्स का भी सपोर्ट है। इसमें
00:02:29JSX सपोर्ट है, और यह आपके tsconfig सेटिंग्स के आधार पर इसे ट्रांसपाइल भी करेगा, और आप एक्सप्लिसिट रिसोर्स मैनेजमेंट के लिए
00:02:34using कीवर्ड जैसे मॉडर्न कीवर्ड्स का भी इस्तेमाल कर सकते हैं। इन सबके अलावा,
00:02:38इसमें वेब वर्कर्स, टेम्पोरल और कई अन्य मॉडर्न APIs का भी सपोर्ट है। यह Node के उन वर्ज़न्स पर,
00:02:43जो इन्हें सपोर्ट नहीं करते, आपके लिए ऑटोमैटिकली पॉलिफ़िल कर देगा, और यह लोकल स्टोरेज सपोर्ट जैसे एक्सपेरिमेंटल
00:02:48Node फीचर्स को अनफ्लैग भी करता है। यह तो उन सभी फीचर्स की बस एक छोटी सी झलक है
00:02:52जो फ़ाइल रनर सपोर्ट करता है, लेकिन मैं यह भी बताना चाहता हूँ कि यह Node के साथ फ़्लैग-टू-फ़्लैग
00:02:56कंपैटिबल है। मेरा मतलब है, चूंकि यह अंत में सिर्फ़ Node ही चला रहा है, यह बस उन फ़्लैग्स को फॉरवर्ड करता है। इसका मतलब है कि अगर आपका
00:03:01स्क्रिप्ट ऐसे किसी फीचर का इस्तेमाल नहीं कर रहा है जिसे Node सपोर्ट नहीं करता, तो आप Node की जगह nub का इस्तेमाल कर सकते हैं और आपको
00:03:06बिल्कुल वही रिजल्ट मिलेगा। वैसे, यह सब स्पीड में लगभग ज़ीरो ओवरहेड के साथ किया जाता है। इसे Node के जितना
00:03:10संभव हो उतना करीब होना चाहिए, और उनके डॉक्यूमेंटेशन के अनुसार, एक nub फ़ाइल को रन करने में उतना ही
00:03:14समय लगता है जितना कि Node में। मैं मानूँगा कि यह Bun से तेज़ नहीं होगा, क्योंकि Bun एक
00:03:19नेटिव रनटाइम है जो Node को रिप्लेस करता है, और nub बस Node के ऊपर बना है। मैंने यह देखने के लिए कि कौन सा तेज़ है,
00:03:24यहाँ अपने Mac पर अपना खुद का बेंचमार्क चलाने का फ़ैसला किया, और अगर मैं इन्हें थोड़ा बेहतर बना दूँ,
00:03:28तो हम देख सकते हैं कि Node वास्तव में मेरे लिए सबसे तेज़ था। यह बिल्कुल
00:03:31nub जितनी स्पीड पर नहीं था। Nub थोड़ा पीछे था, लेकिन फिर TSX उन दोनों से धीमा था। अब फ़ाइल रनर से
00:03:36आगे बढ़ते हुए, दूसरा फीचर है Node वर्ज़न मैनेजर। NVM या FNM की ज़रूरत के दिन
00:03:41अब चले गए हैं। Nub में, अगर मेरे प्रोजेक्ट में Node version नाम की फ़ाइल है, या यदि मैं इसे nvmrc में डिफाइन करता हूँ या यहाँ तक कि
00:03:46package.json में, तो nub Node.js से मेरे लिए ज़रूरी वर्ज़न ऑटोमैटिकली इंस्टॉल कर देगा।
00:03:52फिलहाल यह प्रोजेक्ट लेटेस्ट Node 26 वर्ज़न का इस्तेमाल कर रहा है, अगर मैं इस फ़ाइल को बदलकर कुछ ऐसा कर दूँ
00:03:56जैसे 24, और मैं इसे nub का इस्तेमाल करके दोबारा रन करूँ, तो यह ऑटोमैटिकली मेरे लिए वो Node वर्ज़न ले आएगा। इसमें वो सभी
00:04:02यूज़ुअल मैनेजमेंट कमांड्स भी हैं जिनकी आप उम्मीद करते हैं, इसलिए हम Node वर्ज़न्स इंस्टॉल कर सकते हैं, हम इंस्टॉल्ड
00:04:06वर्ज़न्स की लिस्ट देख सकते हैं, हम Node वर्ज़न्स को अनइस्टॉल कर सकते हैं, और वर्ज़न पिनिंग भी है जो आपके लिए वो Node
00:04:10वर्ज़न फ़ाइल लिख देगा। यह सच में उतना ही आसान है, तो चलिए अपने अगले तीन फीचर्स पर चलते हैं,
00:04:15जहाँ nub pnpm और bun को रिप्लेस कर सकता है। सबसे पहले है तीसरा फीचर, जो कि है
00:04:20पैकेज मैनेजर। यह pnpm से पांच गुना तेज़ होने का वादा कर रहा है, और मुझे लगा कि pnpm पहले से ही
00:04:25सुपर फ़ास्ट था। यह वैसे ही काम करता है जैसा आप उम्मीद करते हैं, nub install पैकेजेस को इंस्टॉल करता है, लेकिन यहाँ एक काफी कूल चीज़
00:04:31यह है कि यह वास्तव में आपकी मौजूदा लॉक फ़ाइलों को अपना सकता है, इसलिए यदि आपने पहले किसी प्रोजेक्ट में bun या pnpm का इस्तेमाल किया है,
00:04:36तो nub अपनी खुद की फ़ाइल रखने के बजाय बस उन लॉक फ़ाइलों को अपडेट कर देगा। यह ज़रूरत पड़ने पर
00:04:41उनके बीच स्विच करना सुपर इज़ी बना देता है, और यही बात pnpm कंपैटिबिलिटी पर भी लागू होती है। Nub में हर
00:04:46पैकेज मैनेजमेंट कमांड pnpm के बिल्कुल समान है, जिसमें pnpm के एडवांस्ड फीचर्स भी शामिल हैं जैसे
00:04:51वर्कस्पेस कैटलॉग्स। यह बिल्कुल वही फ़्लैग है, इसलिए pnpm और nub को आपस में बदलना बस काम करना चाहिए, और यदि आप
00:04:57npm, bun या yarn का उपयोग कर रहे हैं, तो उन पैकेज मैनेजर्स के कॉन्फ़िगरेशन ऑप्शंस को भी पिक कर लिया जाना चाहिए।
00:05:02जब स्पीड के उस दावे की बात आती है, तो वह बेंचमार्क nub को वार्म
00:05:06फ्रोजन इंस्टॉल्स में सबसे तेज़ रखता है, जो 1168 पैकेजेस को इंस्टॉल करने में 346 मिलीसेकंड लेता है, और मेरी मशीन पर मैंने वास्तव में
00:05:1314 डायरेक्ट डिपेंडेंसीज़ का टेस्ट किया जो 212 यूनीक पैकेजेस में रिज़ॉल्व होती हैं, और बेंचमार्क यह साबित करता है कि nub
00:05:19सबसे तेज़ है। Nub ने मेरे पैकेजेस को 136 मिलीसेकंड में इंस्टॉल किया, bun 239 मिलीसेकंड के साथ दूसरे नंबर पर था,
00:05:25और pnpm और npm को वास्तव में एक सेकंड से ज़्यादा का समय लगा, इसलिए वो स्पीड का दावा मेरी मशीन पर सच साबित होता है,
00:05:30कुछ बेहद प्रभावशाली स्पीड्स के साथ। पैकेज मैनेजर सुरक्षा के मामले में भी pnpm के सबसे बेहतरीन हिस्सों को लेता है,
00:05:35इसमें डिफ़ॉल्ट रूप से 24 घंटे की न्यूनतम रिलीज़ एज है, और जब तक मंज़ूरी न मिले यह बिल्ड स्क्रिप्ट्स को नहीं चलाएगा,
00:05:40इसलिए आप ज़्यादातर Shy Hallood हमलों से सुरक्षित रहने चाहिए। एक पैकेज मैनेजर का अगला बेहतरीन हिस्सा
00:05:45एक्चुअल पैकेज रनिंग है, जो फीचर नंबर 4 है, और यहाँ मुख्य बात यह है कि
00:05:49यह npx से 19 गुना तेज़ है। nub x कमांड वास्तव में node modules के अंदर बाइनरी फ़ोल्डर पर रिज़ॉल्व होता है,
00:05:54इसलिए Rust में यह वास्तव में बाइनरीज़ को सीधे निष्पादित करता है, इसलिए रैपर में कोई node प्रोसेस नहीं होता है,
00:05:59जिसका यह भी मतलब है कि यह किसी भी पैकेज मैनेजर के साथ काम करता है क्योंकि यह सीधे उन node modules पर जाता है।
00:06:03अधिकांश nub कमांड्स की तरह, यह वास्तव में pnpm exec के साथ फ़्लैग-टू-फ़्लैग
00:06:07कंपैटिबल है, जिसमें dlx कमांड्स भी शामिल हैं। मेरे Mac पर बेंचमार्क चलाने पर, एक ES बिल्ड को रन करने के लिए
00:06:12nub वास्तव में 169ms पर सबसे तेज़ था, जबकि pnpm 423ms पर था, इसलिए फिर से ऐसा लगता है कि हमारे स्पीड दावे में कुछ सच्चाई है।
00:06:20एक पैकेज मैनेजर में आपको जिस अंतिम फीचर की आवश्यकता होती है, वह है स्क्रिप्ट रनर, और ज़ाहिर तौर पर यह वाला
00:06:24pnpm run से 24 गुना तेज़ है, और इसमें लाइफसाइकिल हुक्स, npm एनवायरनमेंट वेरिएबल्स,
00:06:29और आर्गुमेंट फॉरवर्डिंग है। जब आप npm या pnpm का उपयोग करते हैं, तो ये वास्तव में node.js प्रोग्राम्स को लॉन्च करते हैं,
00:06:34हर बार प्रत्येक पैकेज मैनेजर के जावास्क्रिप्ट को लोड करते हैं, जबकि nub बिना किसी स्टार्ट-अप प्रोसेस के
00:06:38बस अपनी Rust बाइनरी का उपयोग करता है। मेरे लोकल बेंचमार्क ने फिर से दिखाया कि nub run वास्तव में सबसे तेज़ था,
00:06:43लेकिन उतने बड़े मार्जिन से नहीं जितना हमने उस डॉक्यूमेंटेशन में देखा था। यह भी ध्यान देने योग्य है,
00:06:47और इस वीडियो में मैं चौथी बार यह कह रहा हूँ, यह कमांड pnpm के साथ फ़्लैग-टू-फ़्लैग
00:06:51कंपैटिबल है, जिसका अर्थ है कि यह pnpm के मोनो रेपो फीचर्स को भी सपोर्ट करता है। एक चीज़ जिसे मैं वास्तव में
00:06:56उन आखिरी तीन फीचर्स के लिए सराहना चाहता हूँ, वह यह है कि nub ने पहिये का फिर से आविष्कार नहीं किया। यह वास्तव में
00:07:00हुड के तहत OBE का उपयोग करता है, जो JDX द्वारा लिखा गया एक पैकेज मैनेजर है, जो Mise के
00:07:04निर्माता भी हैं। उन्होंने वास्तव में पैकेज मैनेजर को अन्य लाइब्रेरीज़ द्वारा एम्बेड करने योग्य बनाया, और Colin ने
00:07:08nub में इसका उपयोग करने के लिए उनके साथ काम किया, इसलिए यह सिर्फ़ चुराया हुआ काम नहीं है। तो ये nub के मुख्य
00:07:13हाईलाइटिंग फीचर्स हैं, लेकिन अभी भी तलाशने के लिए बहुत कुछ है, जैसे कि ड्रॉप-इन रिप्लेसमेंट GitHub
00:07:17एक्शन, जो ऑफिशियल सेटअप नोड को रिप्लेस करता है। इसे वास्तव में सिर्फ़ नोड के आसपास की हर चीज़ को
00:07:21बहुत आसान बनाने के लिए बनाया गया है। लेकिन यहाँ वह सवाल है जो मैं खुद से पूछ रहा हूँ, क्या मैं वास्तव में इसका
00:07:26इस्तेमाल करूँगा? मेरे लिए, कुछ स्थितियों में मेरा जवाब हाँ है। सच कहूँ तो, मैं काफी हैवी
00:07:31bun यूज़र हूँ, और मुझे अपने डेवलपमेंट में किसी भी कंपैटिबिलिटी समस्याओं का सामना नहीं करना पड़ा है। शायद नए
00:07:35Rust पोर्ट के साथ, मैं दूर हो जाऊँ, लेकिन तब भी मैं बाकी सब चीज़ों के लिए pnpm का उपयोग करूँगा, और मुझे
00:07:40स्वीकार करना होगा, मैंने कभी ध्यान नहीं दिया कि pnpm बहुत धीमा है। मैं अपने node वर्ज़न को मैनेज करने के लिए Mise का भी उपयोग करता हूँ,
00:07:44इसलिए मुझे नहीं लगता कि मुझे उन चीज़ों की आवश्यकता है, लेकिन मैं खुद को उस फ़ाइल
00:07:48रनर की चाहत रखते हुए देख सकता हूँ जो TSX को रिप्लेस करता है। हालाँकि, अल्टीमेट यूज़ केस जो मैं अपने लिए देखता हूँ, वह तब होता है जब
00:07:52मैं नई थ्रोअवे वर्चुअल मशीनों का उपयोग करता हूँ। कभी-कभी मैं कुछ टेस्टिंग करने के लिए इन्हें बहुत जल्दी शुरू करता हूँ,
00:07:57और अगर मैं बस नोड के साथ शुरुआत करना चाहता हूँ, तो मुझे लगता है कि nub सबसे कंपलीट
00:08:01पैकेजों में से एक है, और ऐसा करने का सबसे तेज़ और आसान तरीका है। तो यह ज़्यादातर बस मेरी अपनी आदतों पर
00:08:05अड़े रहने की बात है जो मुझे रोज़ाना nub का उपयोग करने से रोक रही है, लेकिन मैं जानना चाहता हूँ कि आप अपने
00:08:08पैकेज मैनेजर के लिए क्या उपयोग करते हैं, और यदि आप nub जैसा कुछ करते हैं, तो हो सकता है कि आप bun से स्विच करने की सोच रहे हों
00:08:12अब जब इसे Rust में फिर से लिखा गया है। मुझे नीचे कमेंट्स में बताएं, या यदि आपने
00:08:16सब्सक्राइब किया है, और हमेशा की तरह, अगले वीडियो में मिलते हैं।