Transcript
00:00:00صدر للتو أكبر تحديث لـ Bun وأكثره جدلاً، Bun 1.4، المبني بلغة Rust.
00:00:04لقد صنعت مقطع فيديو من قبل عن دراما إعادة الكتابة، لذا دعونا نركز على ما هو جديد،
00:00:07لأنني معجب حقاً ببعضه، وتحديداً ما يتعلق بمكتبة النطاق القياسي،
00:00:11حيث أصبح يضم الآن متصفحاً بلا واجهة، ومكتبة صور، وطرفية وهمية، وملفات Markdown،
00:00:15ومهام مجدولة، وجداول، والمزيد، ليحل محل 15 تبعية ربما كنت تستخدمها.
00:00:19على مدى السنوات القليلة الماضية، كانت إحدى أكبر الشكاوى في JavaScript هي غياب مكتبة قياسية،
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، مما يعني أنه لا يوجد شيء ليتم تثبيته، ولكن إذا كنت تريد نسخة Chrome،
00:00:56يمكنك ضبط خيار الواجهة الخلفية على Chrome، وسيستخدم هذا نسخة Chrome أو Chromium مثبتة بالفعل،
00:01:01وهو ما ستقوم به إذا كنت تستخدم Windows أو Linux. يمكن لهذا في الواقع تشغيل عملية فرعية لـ Chrome بلا واجهة،
00:01:04أو يمكنه الاتصال بنسخة Chrome قيد التشغيل بالفعل، لذا باستخدام هذا الكود هنا،
00:01:09يمكنني التحكم في نسخة Chrome المفتوحة على جهاز Mac الخاص بي، وكل ذلك من خلال Bun. علاوة على ذلك،
00:01:13يمكنك أيضاً استخدام Evaluate لتشغيل كود JavaScript على الصفحة، واستعادة النتائج كقيم JavaScript اصلية،
00:01:17وإذا لم تكن هناك واجهة برمجة تطبيقات لميزة تريدها بعد، يمكنك النزول للتعامل مع أوامر CDP المباشرة.
00:01:21أرى أن هذا سيكون رائعاً جداً لبعض عمليات أتمتة المتصفحات الخفيفة،
00:01:25ولا أعتقد أنه يحل محل Playwright بشكل كامل حتى الآن، فهو لا يحتوي على مشغل اختبارات أو عارض تتبع،
00:01:29ولكن لأمور مثل استخراج البيانات أو نصوص الاستخدام الآلي، فهو خيار ليس سيئاً.
00:01:32التالي، دعونا نلغي تثبيت Sharp ونستبدل به Bun.image. هذه مكتبة صور كاملة،
00:01:37تتيح لنا أخذ ملف، واستدعاء دالة image عليه، ثم ربط عمليات مثل تغيير الحجم، والتدوير،
00:01:42والقلب أفقياً وعمودياً، وتعديل السطوع، والحدة، وتحويله إلى مجموعة من تنسيقات الصور المختلفة.
00:01:46ستتيح لك أيضاً قراءة البيانات الوصفية، مثل العرض والارتفاع والتنسيق، دون فك تشفر بيانات البكسل.
00:01:50خيار رائع آخر يعجبني حقاً هو القدرة على إنشاء صورة بديلة مؤقتة.
00:01:54هذه نسخة منخفضة الجودة يمكنك تضمينها داخل HTML قبل تحميل الصورة الحقيقية.
00:01:59Bun.image هي إحدى الميزات التي أنا متحمس جداً لاستخدامها لأنني واجهت بالفعل مشاكل من قبل
00:02:04في عمليات النشر والبناء تتعلق بمكتبة Sharp. والآن إذا استخدمت Bun، فلن أضطر للتفكير في ذلك.
00:02:08ولن أضطر للتفكير في Marked بعد الآن لأنه يمكننا الآن استخدام Bun.markdown لتحليل Markdown بدلاً منها.
00:02:12ويحتوي هذا على ثلاث واجهات برمجة تطبيقات فقط.
00:02:16حيث يحول Bun.markdown.html نصوص Markdown إلى سلسلة HTML. بينما يقوم Bun.markdown.render بالعرض مع
00:02:22دالات رد نداء مخصصة لكل عنصر. يمنحك هذا مرونة لعرض HTML بفئات مخصصة،
00:02:27أو مخرجات طرفية ANSI، أو أي تنسيق نصوص آخر. بينما يعرض Bun.markdown.react نصوص Markdown إلى React.jsx،
00:02:33ويتيح لك هذا أيضاً تمرير أي مكون تريده لكل عنصر، لتتمكن من الحصول على Markdown مصمم بشكل جميل حقاً.
00:02:37هناك أيضاً مجموعة من الخيارات التي يمكنك تبديلها للتحكم في ميزات Markdown التي تريدها.
00:02:41يمكنك الحصول على أشياء مثل الجداول المنسقة لـ GitHub، الروابط التلقائية، ومعرفات العناوين،
00:02:45وروابط الويكي، على الرغم من أنهم يشيرون إلى تحذير واحد وهو أن مخرجات HTML غير مطهرة،
00:02:50لذا فإن نصوص HTML الخام، وسمات الأحداث، وجافا سكريبت، كلها تمر مباشرة، لذا إذا كنت
00:02:54لذا إذا كنت تعرض Markdown كتبه المستخدمون، فلا تزال هذه مشكلتك وحدك لحلها.
00:02:59بغض النظر عن ذلك، هناك الكثير من محتوى Markdown الذي يتم إنشاؤه هذه الأيام لدرجة أن هذه تبدو إضافة رائعة جداً بالنسبة لي.
00:03:03بالانتقال إلى التالي، يمكنك الآن إلغاء تثبيت Node.pty. يمنحك Bun.terminal طرفية وهمية مدمجة،
00:03:08مما يتيح لك تشغيل Bash أو Vim أو HTOP من داخل JavaScript. إذا سبق لك محاولة تضمين طرفية داخل تطبيق Electron،
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فستسجل مهمة مجدولة على مستوى نظام التشغيل تستخدم في الواقع crontab على Linux، ومجدول المهام على macOS،
00:03:56ومجدول المهام على Windows. يمكنك استخدام بناء الجملة القياسي للجدولة، بما في ذلك أسماء الأيام ومساعدين مثل
00:04:01يومياً، كما أنه يدعم تحليل بناء الجملة هذا أيضاً، والذي سيعيد التاريخ المطابق التالي
00:04:05في المنطقة الزمنية المحلية للنظام. وبالحديث عن المناطق الزمنية، تعمل جميع المهام بالتوقيت المحلي افتراضياً،
00:04:11ولكنه يحتوي على خيارات صريحة لتغيير ذلك، لذا يمكنك التأكد تماماً من وقت تشغيل هذه المهام.
00:04:15التالي في جدول أعمالي هو إخبارك بإلغاء تثبيت concurrently أو npm run all، لأن Bun أصبح يمتلك الآن
00:04:20خياراً متزامناً خاصاً به. يتيح لك استخدام هذا العلامة تشغيل عدة نصوص برمجية من package.json في نفس الوقت،
00:04:24ويتم بادئة المخرجات بدقة باسم السكربت الذي صدرت عنه. كما يتيح لك استخدام مطابقة النمط
00:04:28لأسماء السكربتات، ويحتوي على عامل تصفية لتحديد الحزم التي يجب تشغيل الأمر فيها داخل مساحة العمل الخاصة بك،
00:04:32 ولديه أيضاً خيار للسماح للسكربتات الأخرى بالاستمرار في العمل إذا واجه أحدها خطأ. كما أنه
00:04:37لا يقتصر على التزامن فقط، بل يمكنك أيضاً استخدام التسلسل لتشغيل السكربتات واحداً تلو الآخر
00:04:41مع نفس المخرجات المسبوقة ببادئة والتصفية. هذه هي الميزة التي أرى نفسي استخدمها على الأرجح
00:04:45بشكل أكبر. إلغاء التثبيت التالي لدينا هو أي مكتبة لأرشيف tar. تعتبر Bun.archive نسخة أصلية سريعة
00:04:50لتنسيقي tar وgzip. إنشاء أرشيف هو ببساطة كائن تكون مفاتيحه هي المسارات والقيم هي
00:04:55المحتويات، ويمكن أن تكون المحتويات أي شيء بدءاً من نص، أو blob، أو مصفوفة Uint8، أو مصفوفة buffer. للضغط،
00:05:00يمكنك أيضاً استخدام خيار compress، وتعيينه إلى gzip، ومستوى من 1 إلى 12. ومن الواضح أنه يمكنك بعد ذلك
00:05:05استخراج هذه الملفات باستخدام خيارات مثل نمط مطابقة لاستخراج ملفات محددة فقط، ومن الميزات التي أعجبتني حقاً
00:05:10هي أنه يمكنك قراءة الأرشيف دون استخراجه. يمكن لهذا الكود هنا جلب lodash من سجل npm
00:05:14وقراءة ملف package.json الخاص به دون استخراج ملف واحد. حتى الآن تخلصنا من الحاجة إلى
00:05:19حوالي 7 حزم npm، ولا يزال هناك المزيد في الطريق، على الرغم من أن هذه الميزات أصغر حجماً لذا يمكننا
00:05:24اجتيازها بشكل أسرع. أولاً، يمكن لـ Bun.serve الآن خدمة الملفات الثابتة، مما يلغي الحاجة إلى
00:05:28serve static، وهذا ممتاز لمجلد عام (public) الخاص بموقعك الإلكتروني. ثانياً، أضاف Bun دعماً
00:05:33لتنسيقي JSON5 وXML، لذا لن تحتاج إلى حزمهما بعد الآن. يمكنك استيراد وتحليل وتنسيق كلا التنسيقين
00:05:38مباشرة داخل Bun. الثلاثة الأخيرة هي أدوات مساعد للطرفية. لدينا Bun.sliceAnsi وBun.wrapAnsi
00:05:43وBun.stringWidth، والتي تمنحك إمكانيات تقطيع والتفاف وقياس واعية لأعمدة الطرفية،
00:05:47مما يلغي الحاجة إلى حزم مثل slice-ansi وcli-truncate وwrap-ansi وstring-width.
00:05:52بشكل عام، اختفت حوالي 15 حزمة، ولم أغط سوى نصف هذا الإصدار تقريبا.
00:05:56الملخص لمعظم منشور المدونة هذا هو أن الكثير من الأمور أصبحت أسرع، وتحسن استخدام وحدة المعالجة المركزية، وسرعة بدء التشغيل،
00:06:01وعلى الرغم من كل هذه الميزات، أصبح حجم الملف الثنائي أصغر بنسبة 17%. أوه، ومكتوب بلغة Rust.
00:06:06من الميزات الإضافية التي تستحق الذکر أن Bun.install أصبح يحتوي على متجر افتراضي عام.
00:06:10إذا قمت بتفعيل أداة الربط المعزولة (isolated linker)، يتم استخراج الحزم مرة واحدة على جهازك وعمل رابط رمزي لها
00:06:14إلى مجلدات node_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