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:
Paket genelinde yapılan hızlı bir kontrol, aynı tanımlayıcının birden fazla parçada bildirildiğini doğrular:
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:
randomIdentifiersPrefixseç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
identifiersPrefixayarlayınHer dosyayı obfuscate ederken elle farklı bir önek geçirin (örneğin biri için
identifiersPrefix: 'auth_', diğeri içincheckout_). Etkilidir, ancak çok sayıda dosyanız varsa hataya açıktır — yukarıdaki rastgele seçeneği tercih edin.identifierNamesGeneratorseçeneğinihexadecimalolarak değiştirinHexadecimal 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
randomIdentifiersPrefix— derleme başına rastgele önek (önerilir)identifiersPrefix— açık önek dizesiidentifierNamesGenerator— ad biçimi (mangled,hexadecimal, …)
