التوثيق
/
وصفات عملية
/

تجنّب تعارض المعرِّفات

تجنّب تعارض المعرِّفات بين الملفات المشوَّشة

عندما تجتمع عدة ملفات مشوَّشة بـ VM في الحزمة نفسها، قد تعلن المعرِّف نفسه على المستوى الأعلى فتنهار الصفحة عند التحليل. وإليك سبب حدوث ذلك وكيفية إصلاحه.

العَرَض

يعمل البناء لديك بلا مشاكل، لكن المتصفح يطلق خطأً عند التحليل، قبل أن يبدأ التطبيق:

browser console

خطأ

وفحص سريع للحزمة يؤكد أن المعرِّف نفسه معلن في أكثر من جزء:

terminal

Shell

لماذا يحدث ذلك

افتراضيًا، يستخدم تشويش VM مولّد أسماء المعرِّفات mangled-shuffled. وهو يمرّ على أبجدية صغيرة بترتيب مخلوط حتمي، ويضيف البادئة vm إلى المتغيرات العامة التي تدخلها بيئة التشغيل. وكلا الملفين يصدر معرِّفات من التسلسل المخلوط نفسه — فيتشارك أول متغير عام في كل ملف الاسم نفسه، ويتشارك الثاني اسمًا آخر، وهكذا.

ويُشوَّش كل ملف على حدة، ويعود المولّد إلى بداية تسلسله مع كل ملف منها. وعندما يجتمع ملفان في الحزمة نفسها، تتعارض الأسماء. فيقع إعلانان على المستوى الأعلى بالصيغة const vmd = … في النطاق نفسه، فيرفض المحلل الثاني منهما.

الحلول

اختر أحد الحلول التالية — والخيار الأول هو الحل الموصى به:

  • فعّل randomIdentifiersPrefix (موصى به)

    تحصل كل عملية تشويش على بادئة عشوائية فريدة تُضاف إلى كل معرِّف مولَّد. فلا تعود الأسماء الآتية من ملفات مختلفة تتشارك فضاء أسماء واحدًا، وتختفي التعارضات دون أن تضطر إلى تنسيق البادئات يدويًا.

  • اضبط identifiersPrefix فريدًا لكل ملف

    مرّر يدويًا بادئة مختلفة عند تشويش كل ملف (مثل identifiersPrefix: 'auth_' لملف وcheckout_ لآخر). وهو حل فعّال لكنه عرضة للخطأ إذا كان لديك ملفات كثيرة — ففضّل الخيار العشوائي أعلاه.

  • بدّل identifierNamesGenerator إلى hexadecimal

    تستخدم الأسماء الست عشرية فضاء مفاتيح أكبر بكثير، فيصبح احتمال إنتاج ملفين للمعرِّف نفسه ضئيلًا للغاية. والمفاضلة هنا أن المعرِّفات أطول من ناتج mangled-shuffled، فتكبر الحزمة قليلًا.

  • استخدم إضافة لأداة التحزيم أو واجهة الدفعات متعددة الملفات

    تتولى معظم الإضافات الرسمية لأدوات التحزيم (webpack وRollup وVite) ضمان تفرّد البادئات تلقائيًا بين ملفات البناء الواحد. كما تتولى ذلك واجهة obfuscator.io عند استخدامك تشويش الدفعات متعددة الملفات. أما إذا كنت تركّب التشويش يدويًا عبر واجهة npm، فعليك تفعيل البادئة العشوائية بنفسك.

خيارات ذات صلة