Wie kann ich Fehlermeldungen in einem Minified-JavaScript-Code lesbar machen?

Melden
  1. Verwendung von Source Maps
  2. Einstellungen und Konfiguration der Source Maps
  3. Fairerweise: Nicht jede Fehlermeldung wird perfekt angezeigt
  4. Alternative Herangehensweisen ohne Source Maps
  5. Zusammenfassung

JavaScript-Code wird in der Produktion oft minified, also stark komprimiert, um die Dateigröße zu reduzieren und die Ladezeit zu verbessern. Dies führt dazu, dass der Code schwer lesbar ist: Variablennamen sind meist stark verkürzt und Zeilenumbrüche fehlen. Wenn Fehler in solchem komprimierten Code auftreten, sind die Fehlermeldungen meist schwer nachvollziehbar, weil sie sich auf die minifizierten Zeilen und Variablen beziehen. Deshalb ist es wichtig, Techniken zu verwenden, die diese Fehlermeldungen für Entwickler verständlicher machen.

Verwendung von Source Maps

Das wichtigste Werkzeug, um Fehlermeldungen in minified JavaScript lesbar zu machen, sind sogenannte Source Maps. Eine Source Map ist eine Datei, die die minifizierte Codeversion mit der ursprünglichen, nicht-minifizierten Version verbindet. Sie ermöglicht es Entwicklertools von Browsern, wie Chrome DevTools oder Firefox Developer Tools, die Fehler zeilenweise in den ursprünglichen Quellcode zurückzutragen.

Wenn Sie beim Minifizieren Ihrer JavaScript-Datei ein Tool wie UglifyJS, Terser oder ein Build-System wie Webpack verwenden, können Sie den Prozess so konfigurieren, dass .map-Dateien generiert werden. Ihre Webseite sollte dann sowohl das minifizierte JavaScript als auch die dazugehörige Source Map bereitstellen.

Im Browser werden dank der Source Map Fehlermeldungen und Stacktraces dann auf die originalen Variablennamen, Zeilen und Dateien aufgelöst. Das macht Debugging erheblich einfacher.

Einstellungen und Konfiguration der Source Maps

Beim Erstellen von Source Maps gibt es unterschiedliche Optionen und -formate, die Sie einstellen können. Die gebräuchlichsten Arten sind: inline Source Maps (eingebettet im Skript als Base64-Daten), externe Source Maps (separate .map-Datei) oder Hidden Source Maps (die nicht öffentlich verlinkt werden).

Achten Sie darauf, dass Ihre Serverkonfiguration die Auslieferung der Source Map-Dateien erlaubt und dass sie richtig referenziert sind. Meist geschieht das über eine letzte Zeile im minifizierten Skript wie //# sourceMappingURL=script.min.js.map. Wenn Source Maps fehlen oder nicht korrekt geladen werden können, fällt die Lesbarkeit der Fehlermeldungen zurück auf den minifizierten Code.

Fairerweise: Nicht jede Fehlermeldung wird perfekt angezeigt

Auch mit Source Maps kann es manchmal zu Problemen kommen, zum Beispiel wenn der Quellcode zur Laufzeit verändert wird, eval oder dynamische Skriptausführung verwendet wird oder wenn sourcemaps nicht vollständig oder fehlerhaft generiert wurden. Außerdem können Verschleierungstechniken (Obfuscation) einen Einfluss haben und die Nachvollziehbarkeit erschweren.

Alternative Herangehensweisen ohne Source Maps

Falls Sie keine Möglichkeit zur Verwendung von Source Maps haben, können Sie versuchen, den minifizierten Code mit einem Beautifier oder Prettifier aufzubereiten. Diese Werkzeuge fügen Zeilenumbrüche und Einrückungen hinzu, so dass der Code zumindest strukturell wieder lesbar wird. Dennoch sind Variablennamen verkürzt, sodass das Fehlersuchen weiterhin erschwert ist.

Tools wie beautifier.io oder Prettier helfen dabei.

Auch manuelles Reverse Engineering ist möglich, indem man anhand der Fehlermeldung die Position im minifizierten Code sucht und versucht, anhand von Funktionen und Kontext den Fehler einzukreisen - das ist aber meist sehr aufwändig.

Zusammenfassung

Der beste Weg, um Fehlermeldungen lesbar zu machen, besteht darin, Source Maps zu verwenden und diese korrekt mitzuliefern. So sehen Sie in den Browser-Entwicklertools die ursprünglichen Debugging-Informationen und können die Fehler viel leichter beheben. Ohne Source Maps hilft ein Code-Beautifier zwar bei der Struktur, ersetzt aber nicht die verständlichen Namen, die für effizientes Debugging nötig sind.

0

Kommentare