تصغير JavaScript

احذف التعليقات والفراغات من JavaScript مع ضمان أن الكود يعمل كما كان.

الصق كود JavaScript، ويظهر مصغّرًا مع الحجم قبل وبعد فورًا.

عن الأداة

هذا المصغّر يحذف ما هو آمن حذفه فقط: التعليقات بنوعيها، والمسافات البادئة، والمسافات في آخر السطر، والأسطر الفارغة، والمسافات بين رمزين لا يندمجان (مثل ⁦a = b⁩ تصبح ⁦a=b⁩). النصوص والقوالب ⁦`…`⁩ والتعبيرات النمطية تُنسخ بايتًا بايتًا.

ما لا يفعله عمدًا: لا يدمج الأسطر، لأن جافاسكربت تضيف الفاصلة المنقوطة تلقائيًا عند نهاية السطر (ASI)، ودمج سطرين قد يغيّر معنى ⁦return⁩ أو سطر يبدأ بقوس. ولا يعيد تسمية المتغيرات ولا يحذف كودًا غير مستخدم، لأن ذلك يحتاج إلى محلل كامل للغة يفهم النطاقات و⁦eval⁩ والوحدات. أدوات البناء مثل esbuild وTerser تفعل ذلك في مشروعك؛ هذه الأداة للحالات السريعة: سكربت صغير في صفحة، أو كود يُلصق في حقل محدود الطول.

الحالة الوحيدة التي يحتاج فيها مصغّر بلا محلل إلى الحكم هي الشرطة المائلة: قسمة أم بداية تعبير نمطي؟ بعد ⁦=⁩ و⁦(⁩ و⁦,⁩ و⁦return⁩ هي تعبير نمطي ويُنسخ كاملًا، وبعد اسم أو رقم أو قوس مغلق هي قسمة. وفي الحالتين تبقى المسافات حول الشرطة كما هي، فحتى لو أُسيء تفسيرها لا يتغير نصها.

أسئلة شائعة

لماذا الناتج أكبر مما تعطيه Terser أو esbuild؟

لأن تلك الأدوات تعيد تسمية المتغيرات إلى حرف واحد وتدمج الأسطر وتحذف الكود الذي لا يُستدعى، وكلها تحتاج إلى تحليل كامل للبرنامج. هذه الأداة تكتفي بما يمكن ضمان سلامته دون محلل، وهو عادة 20% إلى 40% من الحجم.

هل يعمل مع ES2020 والوحدات وTypeScript؟

يعمل مع أي جافاسكربت حديث لأنه لا يحتاج إلى فهم البنية: import وexport والدوال السهمية والقوالب كلها تمر كما هي. TypeScript يمرّ أيضًا لكن الناتج يبقى TypeScript، فلا يُنفَّذ في المتصفح مباشرة.

هل يمكن استرجاع الكود الأصلي من الناتج؟

الأسماء والبنية تبقى، فالناتج مقروء بعد تنسيقه من جديد. التعليقات وحدها تُفقد نهائيًا، فاحتفظ بالنسخة الأصلية دائمًا.