Dokümantasyon
/
Tarifler
/

Tanımlayıcı Çakışmalarından Kaçınma

Avoiding identifier collisions across obfuscated files

Birden fazla VM ile obfuscate edilmiş dosya aynı pakette bir araya geldiğinde, aynı üst düzey tanımlayıcıyı bildirip sayfayı ayrıştırma sırasında çökertebilirler. İşte bunun neden olduğu ve nasıl düzeltileceği.

Belirti

Derlemeniz sorunsuz çalışır, ancak tarayıcı, uygulama başlamadan önce ayrıştırma sırasında hata verir:

browser console

Error

Paket genelinde yapılan hızlı bir kontrol, aynı tanımlayıcının birden fazla parçada bildirildiğini doğrular:

terminal

Shell

Bu neden olur

Varsayılan olarak VM obfuscation, mangled-shuffled tanımlayıcı-adı üreticisini kullanır. Küçük bir alfabeyi deterministik olarak karıştırılmış bir sırada dolaşır ve çalışma zamanı tarafından tanıtılan global değişkenlere bir vm öneki ekler. Her iki dosya da aynı karıştırılmış diziden tanımlayıcılar üretir — bu nedenle her dosyadaki ilk global aynı adı paylaşır, ikincisi başka bir adı paylaşır ve bu böyle devam eder.

Her dosya bağımsız olarak obfuscate edilir ve üretici her biri için dizisinin başından yeniden başlar. İki dosya aynı pakette bir araya geldiğinde adlar çakışır. İki üst düzey const vmd = … bildirimi aynı kapsama düşer ve ayrıştırıcı ikincisini reddeder.

Düzeltmeler

Aşağıdakilerden birini seçin — ilk seçenek önerilen düzeltmedir:

  • randomIdentifiersPrefix seçeneğini etkinleştirin (önerilir)

    Her obfuscation çalıştırması, üretilen her tanımlayıcının önüne eklenen benzersiz bir rastgele önek alır. Farklı dosyalardan gelen adlar artık aynı ad alanını paylaşmaz, böylece önekleri elle koordine etmenize gerek kalmadan çakışmalar ortadan kalkar.

  • Her dosya için benzersiz bir identifiersPrefix ayarlayın

    Her dosyayı obfuscate ederken elle farklı bir önek geçirin (örneğin biri için identifiersPrefix: 'auth_', diğeri için checkout_). Etkilidir, ancak çok sayıda dosyanız varsa hataya açıktır — yukarıdaki rastgele seçeneği tercih edin.

  • identifierNamesGenerator seçeneğini hexadecimal olarak değiştirin

    Hexadecimal adlar çok daha geniş bir anahtar uzayı kullanır, bu nedenle iki dosyanın aynı tanımlayıcıyı üretme olasılığı yok denecek kadar azdır. Ödünleşim: tanımlayıcılar mangled-shuffled çıktısından daha uzundur, bu yüzden paket biraz daha büyük olur.

  • Bir paketleyici eklentisi veya çoklu dosya toplu işlem arayüzünü kullanın

    Çoğu resmi paketleyici eklentisi (webpack, Rollup, Vite) bir derlemedeki dosyalar arasında önek benzersizliğini otomatik olarak halleder. obfuscator.io arayüzü de çoklu dosya toplu obfuscation kullandığınızda bunu halleder. Obfuscation'ı npm API ile elle kuruyorsanız, rastgele öneki kendiniz etkinleştirmeniz gerekir.

İlgili seçenekler