Dokumentation
/
Rezepte
/

Bezeichnerkollisionen vermeiden

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:

browser console

Error

Eine kurze Prüfung des Bundles bestätigt, dass derselbe Bezeichner in mehr als einem Chunk deklariert wird:

terminal

Shell

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:

  • randomIdentifiersPrefix aktivieren (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 identifiersPrefix setzen

    Ü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.

  • identifierNamesGenerator auf hexadecimal umstellen

    Hexadezimale 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