تخطّى إلى المحتوى الرئيسي
استبدال ESLint وPrettier بـ Biome: ملاحظات ميدانية من مستودعَي إنتاج

استبدال ESLint وPrettier بـ Biome: ملاحظات ميدانية من مستودعَي إنتاج

July 11, 2026
أدوات المطوّر
5 دقيقة قراءة

أبرز النقاط

يستبدل Biome كلًّا من ESLint وPrettier بملف تنفيذي واحد مكتوب بلغة Rust، وملف إعداد واحد (biome.json)، وأمر واحد هو biome check --write ينسّق الشيفرة ويفحصها ويرتّب الاستيرادات في تمريرة واحدة.

الترحيل مؤتمت في معظمه: يترجم الأمران biome migrate eslint --write وbiome migrate prettier --write إعداداتك الحالية، لكن القواعد التي تعتمد على إضافات ESLint لا تُنقل تلقائيًا.

أضاف الإصدار Biome 2.0 قواعد فحص واعية بالأنواع (type-aware) تعمل دون تشغيل مُصرّف TypeScript، فقاعدة مثل noFloatingPromises تعمل دون الحاجة إلى tsc.

الميزة الأبرز هي السرعة: ملف تنفيذي واحد بلغة Rust يشغّل التنسيق والفحص وترتيب الاستيراد بالتوازي، فينهي المستودعات الكبيرة في جزء بسيط من الوقت الذي يستغرقه خط ESLint وPrettier.

لكنه ليس بديلًا كاملًا عن ESLint بعد؛ فنظام الإضافات لا يزال فتيًّا، ولهذا قد تُشغّل Biome وESLint جنبًا إلى جنب إن كنت تعتمد على إضافات محددة.

ماذا يستبدل Biome فعليًا؟

Biome أداة موحّدة تجمع منسّقًا للشيفرة (بديل شبه مباشر عن Prettier) ومدقّقًا (محرك قواعد بأسلوب ESLint) في ملف تنفيذي واحد بلغة Rust. في مشروع نموذجي يحل محل أربعة مكوّنات دفعة واحدة: Prettier، وESLint، وحزمة eslint-config-prettier التي تمنع تعارضهما في التنسيق، وإضافة منفصلة لترتيب الاستيراد. كل ذلك يعيش في ملف biome.json واحد، وأمر واحد هو biome check --write ينسّق ويطبّق الإصلاحات الآمنة ويرتّب الاستيراد معًا وبشكل حتمي.

متى ينبغي الانتقال إلى Biome؟

ننتقل حين يتحوّل خط الفحص إلى عبء صيانة بحد ذاته ولا نعتمد على إضافات ESLint نادرة. الإشارات العملية: بطء الفحص والتنسيق بدرجة ملحوظة في CI أو في hook ما قبل الالتزام؛ وإعداد ESLint الذي تشعّب إلى flat-config مع طبقات من الإضافات لم يعد أحد يفهمها بالكامل؛ والاعتماد على قواعد قياسية أكثر من قواعد مخصّصة؛ والرغبة في قواعد واعية بالأنواع دون تحمّل كلفة الفحص الكامل للأنواع في كل تشغيل.

كيف نُرحّل إعداد ESLint وPrettier الحالي؟

يوفّر Biome أوامر ترحيل تقرأ إعدادك الحالي وتترجمه. بعد تثبيت @biomejs/biome كتبعية تطوير مثبّتة الإصدار، نشغّل biome migrate eslint --write وbiome migrate prettier --write. يربط ترحيل ESLint القواعد التي لها مقابل في Biome داخل biome.json ويحفظ التجاوزات، وينسخ ترحيل Prettier خياراتك (نمط الاقتباس، الفواصل المنقوطة، الفواصل اللاحقة، عرض السطر) لتبقى النتيجة البصرية متطابقة. أما قواعد الإضافات التي لا مقابل لها فتُسقَط، لذا نقارن الإعداد المولّد بقائمة قواعدنا القديمة ونتخذ قرارًا واعيًا عند كل فجوة، ثم نحذف ESLint وPrettier وeslint-config-prettier ونوجّه hook ما قبل الالتزام والمحرّر إلى Biome.

ماذا يغيّر الفحص الواعي بالأنواع في Biome 2.0؟

في عالم ESLint تتطلب القواعد التي تعتمد على الأنواع حزمة typescript-eslint مع معلومات الأنواع، ما يعني تشغيل مُصرّف TypeScript كجزء من الفحص — وهو غالبًا أبطأ جزء. يُجري Biome استدلالًا خفيفًا للأنواع بلغة Rust، فتعمل قاعدة مثل noFloatingPromises دون تمريرة فحص للأنواع. إنه ليس مدقّق أنواع كاملًا ولن يحل محل tsc لأمان الأنواع وقت البناء، لكنه أرخص بكثير للقواعد الواعية بالأنواع التي يغطّيها.

كيف يعمل Biome في monorepo؟

يدعم Biome 2.0 الإعداد المتداخل: ملف biome.json جذري يحدد الإعدادات المشتركة، ويمكن لكل حزمة أن ترثه وتتجاوز القواعد محليًا عبر ضبط extends على القيمة "//". هذا يتيح الحفاظ على أساس تنسيق وفحص مشترك مع جعل حزمة الـ API أكثر صرامة تجاه استدعاءات console.log مقارنة بحزمة الواجهة، دون تكرار الإعداد كله.

مقارنة Biome بـ ESLint وPrettier

المكوّنات: ESLint وPrettier أداتان وملفا إعداد وحزمة ربط؛ أما Biome فملف تنفيذي واحد وملف biome.json واحد. لغة التنفيذ: ESLint وPrettier بلغة JavaScript، بينما Biome بلغة Rust.

الأداء والميزات: يستغرق خط ESLint وPrettier عدة ثوانٍ على مستودع كبير، بينما ينهيه Biome عادةً في أقل من ثانية، مع ترتيب استيراد مدمج وقواعد واعية بالأنواع دون tsc. في المقابل، نظام إضافات ESLint أنضج بآلاف الإضافات، بينما لا يزال نظام إضافات Biome المبني على GritQL فتيًّا. التنسيق قريب جدًا من Prettier مع فروق طفيفة فقط.

ما الذي يُبقينا على ESLint؟

لا تضاهي مجموعة قواعد Biome بعد كل قاعدة في إضافات شائعة مثل eslint-plugin-jsx-a11y أو eslint-plugin-import، ونظام إضافاته أحدث بكثير من نظام ESLint. في مستودع لدينا فيه قواعد وصول (accessibility) صارمة وبضع قواعد مخصّصة، أبقينا إعداد ESLint نحيلًا لتلك القواعد تحديدًا وتركنا لـ Biome التنسيق وترتيب الاستيراد ومعظم فحص الصحة. تشغيل الاثنين ليس مجانيًا، لكن تقليص ESLint إلى القواعد القليلة التي يعجز Biome عن التعبير عنها أزال معظم العبء القديم.

الأسئلة الشائعة

**س:** هل Biome بديل مباشر عن Prettier؟

**ج:** في التنسيق هو شبه مباشر — يستهدف Biome توافقًا عاليًا مع Prettier، وبعد الترحيل سترى فروقًا قليلة في حالات حدّية فقط، وتُقابَل خياراته مباشرةً بخيارات Prettier: نمط الاقتباس والفواصل المنقوطة والفواصل اللاحقة وعرض السطر.

**س:** هل يحتاج Biome إلى مُصرّف TypeScript للقواعد الواعية بالأنواع؟

**ج:** لا. منذ Biome 2.0 تعمل قواعد مثل noFloatingPromises على استدلال Biome الخاص دون tsc، فيبقى الفحص سريعًا. لكنه لا يحل محل tsc لفحص الأنواع الكامل وقت البناء.

**س:** هل يمكن تشغيل Biome وESLint معًا؟

**ج:** نعم، وهو إعداد انتقالي شائع. اترك لـ Biome التنسيق وترتيب الاستيراد والقواعد القياسية، وأبقِ إعداد ESLint محدودًا على قواعد الإضافات التي لا مقابل لها في Biome، مثل بعض فحوص الوصول أو حل مسارات الاستيراد.

**س:** ما اللغات التي يدعمها Biome؟

**ج:** JavaScript وTypeScript وJSX/TSX وJSON وCSS، مع دعم GraphQL ولغات إضافية تتقدّم. لا يزال تنسيق Markdown وYAML قيد النضج، لذا راجع مصفوفة الدعم الحالية قبل الاعتماد عليهما.