Bezeichnerkollisionen zwischen obfuskierten Dateien vermeiden
Landen mehrere VM-obfuskierte Dateien im selben Bundle, können sie denselben Top-Level-Bezeichner deklarieren und die Seite bereits beim Parsen zum Absturz bringen. Hier erfahren Sie, warum das passiert und wie Sie es beheben.
Das Symptom
Ihr Build läuft fehlerfrei durch, aber der Browser wirft schon beim Parsen einen Fehler, bevor die Anwendung startet:
Eine kurze Prüfung des Bundles bestätigt, dass derselbe Bezeichner in mehr als einem Chunk deklariert wird:
Warum das passiert
Standardmäßig verwendet die VM-Obfuskierung den Bezeichnernamen-Generator mangled-shuffled. Er durchläuft ein kleines
Alphabet in einer deterministisch gemischten Reihenfolge und stellt Globals, die von der Laufzeit eingeführt werden, ein
vm voran. Beide Dateien geben Bezeichner aus derselben gemischten Folge aus – der erste Global in jeder Datei trägt
also denselben Namen, der zweite ebenfalls, und so weiter.
Jede Datei wird unabhängig obfuskiert, und der Generator beginnt für jede von vorn. Landen zwei Dateien im selben Bundle,
kollidieren die Namen. Zwei Top-Level-Deklarationen const vmd = … landen im selben Scope, und der Parser weist die
zweite zurück.
Lösungen
Wählen Sie eine der folgenden Möglichkeiten – die erste ist die empfohlene Lösung:
randomIdentifiersPrefixaktivieren (empfohlen)Jeder Obfuskierungslauf erhält ein eindeutiges zufälliges Präfix, das jedem generierten Bezeichner vorangestellt wird. Namen aus verschiedenen Dateien teilen sich damit keinen Namensraum mehr, und Kollisionen verschwinden, ohne dass Sie Präfixe von Hand koordinieren müssen.
Pro Datei ein eindeutiges
identifiersPrefixsetzenÜbergeben Sie beim Obfuskieren jeder Datei manuell ein anderes Präfix (z. B.
identifiersPrefix: 'auth_'für die eine,checkout_für die andere). Wirksam, aber fehleranfällig, wenn Sie viele Dateien haben – bevorzugen Sie die zufällige Variante oben.identifierNamesGeneratoraufhexadecimalumstellenHexadezimale Namen nutzen einen sehr viel größeren Namensraum, sodass die Wahrscheinlichkeit, dass zwei Dateien denselben Bezeichner erzeugen, verschwindend gering ist. Der Kompromiss: Die Bezeichner sind länger als die Ausgabe von
mangled-shuffled, das Bundle wird also etwas größer.Ein Bundler-Plugin oder die UI für die Stapelverarbeitung mehrerer Dateien nutzen
Die meisten offiziellen Bundler-Plugins (webpack, Rollup, Vite) sorgen innerhalb eines Builds automatisch für eindeutige Präfixe über alle Dateien hinweg. Auch die Oberfläche von obfuscator.io übernimmt das, wenn Sie mehrere Dateien im Stapel obfuskieren. Verdrahten Sie die Obfuskierung dagegen manuell über die npm-API, müssen Sie das zufällige Präfix selbst aktivieren.
Verwandte Optionen
randomIdentifiersPrefix– zufälliges Präfix pro Build (empfohlen)identifiersPrefix– explizite Präfix-ZeichenketteidentifierNamesGenerator– Form der Namen (mangled,hexadecimal, …)
