Utilia

منسّق JavaScript وأداة ضغطه

نسّق شيفرة JavaScript المضغوطة أو اضغطها باستخدام Terser، أو افحص صياغتها مع تحديد السطر والعمود لكل خطأ. تعمل الأداة في متصفحك فقط.

خيارات الضغط

كيفية تنسيق شيفرة JavaScript أو ضغطها

  1. الصق شيفرتك، أو انقر فتح ملف لتحميل ملف .js أو .mjs أو .jsx (حتى 10 MB).
  2. اختر المسافة البادئة، وإذا كنت تفضّل أسلوب Allman ففعّل خيار الأقواس المعقوصة في سطر مستقل.
  3. انقر تنسيق (تجميل) لتصبح الشيفرة مقروءة.
  4. لتصغير حجمها، اضبط خيارات الضغط ثم انقر ضغط. وإذا أردت البحث عن الأخطاء فقط، فانقر فحص الصياغة.
  5. انسخ النتيجة أو نزّلها. يعرض سطر الحالة الحجم قبل المعالجة وبعدها، ونسبة التوفير.

تُقرأ الشيفرة وتُحوَّل فقط، ولا تُنفَّذ أبدًا: لا يُشغَّل أي شيء تلصقه في هذه الصفحة.

التجميل باستخدام js-beautify

يعتمد زر تنسيق (تجميل) على مكتبة js-beautify. فهي تضع كل تعليمة في سطر مستقل، وتزيح الكتل البرمجية، وتضيف مسافات حول العوامل وبعد الكلمات المحجوزة، وتحتفظ بسطر فارغ واحد على الأكثر حيث كانت لديك أسطر فارغة. كما تفهم الصياغة الحديثة (الأصناف، والدوال السهمية، والقوالب النصية، وasync/await) وصياغة JSX. إنها أسرع طريقة لقراءة مكتبة مضغوطة أو مقتطف من سطر واحد نسخته من صفحة ويب.

لا يغيّر التجميل سوى المسافات والأسطر، ولا يتحقق من صحة الشيفرة: فالقوس الناقص لا ينتج عنه إلا إزاحة غريبة. استخدم فحص الصياغة لهذا الغرض.

الضغط باستخدام Terser

يعتمد زر ضغط على Terser، أداة الضغط التي تستخدمها معظم أدوات بناء مشاريع JavaScript. ولأنها كبيرة الحجم، لا تُنزَّل إلا عند أول نقرة على ضغط أو فحص الصياغة. وتقابل الخيارات إعدادات Terser مباشرةً:

  • وحدة ES (import/export): تحلّل الشيفرة على أنها وحدة (module: true)، فيُطبَّق الوضع الصارم وتصبح الأسماء في المستوى الأعلى خاصة، فيمكن إعادة تسميتها وحذف غير المستخدم منها. اترك الخيار غير مفعّل مع السكربتات التقليدية التي تستخدم سكربتاتٌ أخرى دوالَّها العامة.
  • تقليص الشيفرة (compress): يعيد كتابة الشيفرة بصيغة مكافئة أقصر: حساب الثوابت مسبقًا (2*60 تصبح 120)، وحذف الشيفرة الميتة، ودمج تصريحات var، واختصار الشروط.
  • تقصير أسماء المتغيرات (mangle): يعيد تسمية المتغيرات المحلية والمعاملات بحرف أو حرفين. أما الأسماء العامة وخصائص الكائنات فلا يُعاد تسميتها أبدًا.
  • الإبقاء على تعليقات الترخيص: يحتفظ بالتعليقات التي تبدأ بـ/*! أو تحتوي على @license أو @preserve، وتُحذف كل التعليقات الأخرى.

لا يغيّر الضغط ما تفعله الشيفرة، لكن الشيفرة التي تعتمد على أسماء الدوال (fn.name) أو على eval قد يختلف سلوكها بعد إعادة التسمية. ألغِ تفعيل تقصير أسماء المتغيرات في هذه الحالة.

أخطاء الصياغة مع السطر والعمود

عندما يعجز Terser عن تحليل الشيفرة، يعرض ضغط وفحص الصياغة رسالة الخطأ مع رقم السطر والعمود، مثل: «السطر 12، العمود 8 – خطأ في الصياغة: Unexpected token punc «)»». يُعدّ العمود بالمحارف بدءًا من 1. أما نص الخطأ التفصيلي نفسه فيصدر عن Terser بالإنجليزية. والسبب الشائع قوس ناقص في موضع سابق من الملف، لذا راجع أيضًا الأسطر التي تسبق الموضع المذكور مباشرةً.

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

هل تُرفع شيفرتي إلى أي مكان؟

لا. تعمل js-beautify وTerser كلتاهما في متصفحك، وتبقى شيفرتك على جهازك.

هل يمكنني ضغط TypeScript؟

لا. لا يقبل Terser إلا JavaScript. حوّل TypeScript إلى JavaScript أولًا، ثم اضغط الناتج. أما تنسيق شيفرة TypeScript البسيطة باستخدام تنسيق (تجميل) فينجح غالبًا، لكن تعليقات الأنواع قد تظهر بمسافات غير مألوفة.

لماذا تبدو شيفرتي المضغوطة مختلفة عمّا كتبت؟

يحسب خيار تقليص الشيفرة التعابير الثابتة، ويدمج القيم المستخدمة مرة واحدة في مواضعها، ويحذف الشيفرة التي لا يمكن الوصول إليها. والنتيجة تتصرف بالطريقة نفسها. ألغِ تفعيل تقليص الشيفرة إذا أردت حذف المسافات والتعليقات فقط.

هل يجب أن يطابق خيار «وحدة ES» شيفرتي؟

نعم. الشيفرة التي تحتوي على import أو export ينبغي ضغطها على أنها وحدة. أما السكربت التقليدي المضغوط كوحدة فقد يفقد دوالَّ عامة تستدعيها سكربتات أخرى، لأن الأسماء في المستوى الأعلى تُعامل حينها على أنها خاصة.

وماذا عن JSON؟

JSON صالح بوصفه JavaScript، لذا يقبله الزرّان كلاهما، لكن منسّق JSON المخصص يقدّم رسائل خطأ أوضح ويتيح ترتيب المفاتيح.