Bun 1.4 للتو حذف 15 من تبعياتك

BBetter Stack
Computing/SoftwareInternet Technology

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أراك في المرة القادمة.

Key Takeaway

يضيف إصدار Bun 1.4 مكتبة قياسية شاملة تدمج 15 وظيفة أساسية مثل إدارة الصور والمتصفحات والمهام المجدولة، مما يغني عن استخدام حزم خارجية متعددة ويقلل حجم الملف الثنائي بنسبة 17%.

Highlights

  • يصدر إصدار Bun 1.4 مبنياً بلغة Rust مع مكتبة قياسية موسعة تحل محل 15 تبعية شائعة.

  • يغني Bun.web-view عن حزم Playwright وPuppeteer للتحكم في متصفح بلا واجهة باستخدام محرك WebKit أو Chrome.

  • يتيح Bun.image معالجة كاملة للصور دون الاعتماد على مكتبة Sharp الخارجية.

  • يوفر Bun.markdown تحويل نصوص Markdown إلى HTML أو React.jsx بثلاث واجهات برمجة تطبيقات أساسية.

  • يلغي Bun.terminal الحاجة إلى Node.pty لتشغيل محطة وهمية داخل JavaScript.

  • يقلل Bun 1.4 حجم الملف الثنائي بنسبة 17% مع تحسين سرعة بدء التشغيل واستخدام وحدة المعالجة المركزية.

Timeline

مقدمة تحديث Bun 1.4 ومكتبته القياسية

  • يصدر تحديث Bun 1.4 المبني بلغة Rust ليعالج شكاوى غياب مكتبة قياسية في JavaScript.
  • يضم التحديث أدوات للمتصفحات، الصور، الطرفيات، ملفات Markdown، والمهام المجدولة.

يركز الإصدار الجديد على دمج الوظائف الأساسية ضمن بيئة العمل مباشرة. تهدف هذه الخطوة إلى تقليل الاعتماد على التبعيات الخارجية وتجنب المخاطر الأمنية المرتبطة بسلاسل التوريد.

أتمتة المتصفحات ومعالجة الصور

  • يحل Bun.web-view محل حزم Playwright وPuppeteer للتحكم في المتصفحات بلا واجهة.
  • يتيح Bun.image تغيير الحجم، التدوير، وقراءة البيانات الوصفية للصور دون مكتبة Sharp.

تستخدم ميزة المتصفح محرك WebKit على أجهزة Mac أو تتصل بنسخ Chrome المثبتة على الأنظمة الأخرى. تتيح أداة الصور استخراج البيانات الوصفية وإنشاء صور بديلة منخفضة الجودة بكفاءة عالية.

تحليل النصوص والطرفيات الوهمية

  • يحل Bun.markdown محل حزم تحليل النص لتحويل Markdown إلى HTML وReact.jsx.
  • يمنح Bun.terminal القدرة على تشغيل طرفية وهمية داخل JavaScript دون الحاجة إلى Node.pty.

تتضمن ميزة Markdown خيارات متعددة للعرض وتخصيص العناصر المخرجة. توفر الطرفية الوهمية بيئة تشغيل للعمليات الفرعية مع دعم المخرجات الملونة والموجهات التفاعلية.

المهام المجدولة وإدارة الحزم

  • يعالج Bun.cron المهام المجدولة محلياً وعبر نظام التشغيل دون تبعيات خارجية.
  • يقلل Bun 1.4 حجم الملف الثنائي بنسبة 17% مع تقديم متجر افتراضي عام لتوفير مساحة القرص.

يتيح التحديث تشغيل عدة نصوص برمجية بشكل متزامن أو متسلسل، بالإضافة إلى معالجة أرشيفات tar وgzip وقراءتها دون استخراج. يوفر نظام الربط المعزولة استخراج الحزم مرة واحدة لتوفير مساحة التخزين.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video