
JS und CSS deminifizieren: minifizierten Produktionscode debuggen
Unleserliche Traces, fehlende Maps: JS und CSS im Browser mit Unminify und Beautify lesbar machen — nur Formatierung, Namen bleiben weg.
Wenn Produktions-JS und -CSS auf einer unlesbaren Zeile liegen
Ein Stacktrace auf app.min.js:1:18432 oder ein Stylesheet in einer einzigen 40-KB-Zeile ist zuerst ein Formatierungsproblem, kein Dekompiler-Problem. Die Minifizierung hat Whitespace und Kommentare entfernt. Mangling (Terser mangle, cssnano-Identifier-Kompression, falls aktiv) hat Symbole umbenannt. Pretty-Print stellt die Form wieder her. Nur eine Source Map stellt die Originalnamen wieder her. Fehlen Maps und Sie brauchen eine lokale Kopie, rücken der JavaScript-Unminifier online und der CSS-Unminifier online den Code im Browser neu ein. Sie laden den Payload nicht hoch und machen Mangling nicht rückgängig. Für den Rundgang durch DevTools und Source Maps, nur für JavaScript, halten Sie den früheren Leitfaden zum Debuggen minifizierten JavaScripts bereit. Dieser Artikel beschreibt den Ablauf auf den Tool-Seiten für JS und CSS.
Wann Entminifizieren die richtige Wahl ist und wann nicht
Der Leitfaden zum Debuggen minifizierten JavaScripts ist die Vertiefung. Er behandelt die Pretty-Print-Funktion von Chrome, sourceMappingURL, versteckte Maps und die Frage, warum aus a ohne Map nie wieder getUserProfile wird. Dieser Text wiederholt die DevTools-Tour nicht. Er beantwortet eine andere Suche. Sie haben bereits ein minifiziertes JS- oder CSS-Snippet (Ticket, CDN-Kopie, Theme-Datei) und suchen die FastMinify-Seiten, die es formatieren. Verwandte Formatter finden Sie im Unminify-Tools-Hub.
Unminify und Beautify auf FastMinify rücken den Code nur neu ein. Es sind keine Dekompiler. Diese Grenzen sind fest, denn sie entsprechen dem, was die Tools tun (js-beautify im Tab, Einzugsgröße, Leerzeichen oder Tabs, zuerst eine Syntaxprüfung).
Einschränkungen:
Was funktioniert:
Erst Maps, dann Pretty-Print, dann die Tool-Seiten
Gehen Sie in dieser Reihenfolge vor. Die Seiten JavaScript deminifizieren und CSS deminifizieren sind Schritt 3, wenn Maps fehlen und Sie eine formatierte Kopie brauchen.
1Nach einer Source Map suchen
In DevTools → Sources Originaldateien neben dem Bundle prüfen, eine danebenliegende .map-Datei oder einen Kommentar //# sourceMappingURL= (JS) / /*# sourceMappingURL= (CSS). Lädt eine Map, dort debuggen und aufhören. Kein Formatter kommt an Originalnamen heran.
2Pretty-Print im Browser oder Editor
In Chrome Sources formatiert die Schaltfläche {} (Pretty Print) die Datei an Ort und Stelle. In VS Code genügt Format Document auf einer gespeicherten Datei wie .min.js oder .min.css. Die Grenze bleibt dieselbe: Namen bleiben umbenannt. Bei CSS-Kaskadenfehlern ist Pretty-Print plus Styles-Panel oft besser, als die Datei herauszukopieren.
3Nur lokal unminifizieren, wenn Sie eine Dateikopie brauchen
Gibt es keine Map und brauchen Sie eingerückten Quellcode auf der Platte oder im Ticket, fügen Sie JS in den JavaScript-Unminifier oder CSS in den CSS-Unminifier ein. Die Verarbeitung bleibt im Browser. Einzugsgröße und Einzugszeichen sind Formatierungsoptionen, kein Deobfuscator.
4Mit Literalen navigieren, nicht mit Namen
Nach eindeutigen Strings, URLs, Farbtokens und Fehlermeldungen suchen. if / return / @media folgen. Nicht warten, bis a wieder ein echter Identifier wird.
Beispiel:
Vorher (minifiziert):
Nachher (deminifiziert):
Sie erhalten eine lesbare Form zurück, nicht den ursprünglichen Quellcode
Eine einzeilige IIFE oder einen Ausschnitt eines Terser-Bundles einfügen. Der JavaScript-Unminifier führt js-beautify im Browser nach einer Syntaxprüfung aus. Sie bekommen Wrapping und Indent. Sie bekommen nicht die Namen vor dem Mangle. Das !0 im Beispiel ist Absicht: viele Minifier schreiben true so um, und Formatierung macht daraus nicht wieder true.
Vorher
Nachher
{} beim JS-Debugging-Leitfaden bleibenKomprimiertes CSS ist meist eine Zeile mit zusammengequetschten Selektoren. Der CSS-Unminifier formatiert mit js-beautify: Selektoren auf eigenen Zeilen, Deklarationen eingerückt, @media-Blöcke visuell verschachtelt. Spezifität und Kaskade ändern sich nicht, nur der Whitespace. Wenn eine Regel nach dem Formatieren „verschwindet“, hat sie schon vorher nicht gegriffen; Formatierung hat sie nicht gelöscht.
Vorher
Nachher
.9 bleiben kurz; das ist kein „Expand to longhand“-ToolZwei konkrete Abläufe mit den Unminify-Seiten
Öffnen Sie den JavaScript-Unminifier. Fügen Sie einen einzelnen Ausschnitt ein (Funktion, Webpack-Chunk, Bookmarklet) und klicken Sie auf Entminifizieren. Die Ausgabe erscheint eingerückt im rechten Bereich. Kopieren Sie sie in den Editor und suchen Sie nach einem eindeutigen String aus dem Stacktrace. Alles bleibt im Tab.
1. Die abstürzende Datei kopieren, nicht die HTML-Seite
Aus DevTools → Network oder Sources die .js speichern, die der Trace nennt. Das ganze HTML-Dokument in einen JS-Unminifier einzufügen lässt die Syntaxprüfung scheitern.
2. In unminify-js einfügen
Lassen Sie den Einzug bei 2 Leerzeichen, außer Ihr Team nutzt Tabs. Bei einem Syntaxfehler ist der eingefügte Text abgeschnitten oder mit HTML vermischt. Korrigieren Sie den Text, das Tool arbeitet korrekt.
3. Literale suchen, dann zurück zu DevTools
Fehlermeldung oder URL finden. Den umgebenden Kontrollfluss notieren. Die Live-Datei in Chrome per Pretty-Print formatieren, wenn noch Breakpoints nötig sind: Eine formatierte Kopie auf der Platte ersetzt keinen pausierten Call-Stack.
Den CSS-Unminifier öffnen. Das komprimierte Sheet einfügen (oder den Ausschnitt mit dem Selektor). Nach dem Formatieren nach der Klasse aus dem DOM suchen. Mit DevTools Computed vergleichen: Formatierung ändert nicht, welche Regel gewinnt.
1. Das Stylesheet kopieren, nicht das minifizierte HTML
Network-Panel → die .css-Anfrage. Inline-<style>-Blöcke lassen sich ebenfalls einfügen, sofern sie nur gültiges CSS enthalten.
2. Entminifizieren, dann Klasse oder ID suchen
Eine Selektorliste wie .btn,.cta landet auf zwei Zeilen. Das ist Lesbarkeit, keine Kaskadenänderung.
3. Dem Styles-Panel für das tatsächliche Ergebnis vertrauen
Die formatierte Datei zeigt, was ausgeliefert wurde. Das Styles-Panel zeigt, was wirklich greift (Overrides, Layers, !important). Nutzen Sie beides.
Auf beiden Unminify-Seiten sind Indent-Größe und Indent-Zeichen die Format-Regler. Minify ignoriert sie. Es gibt keinen Schalter „Originalnamen wiederherstellen“. Für den Rest der Familie (HTML, JSON, XML) siehe den Unminify-Tools-Hub.
Unminify und Beautify nutzen denselben Formatter, aber für andere Suchintentionen
Auf FastMinify formatieren JavaScript deminifizieren und JavaScript beautifyen beide mit js-beautify nach einer Syntaxprüfung. Dasselbe Paar gibt es für CSS: CSS deminifizieren und CSS-Beautifier online. Die Trennung folgt der Suchabsicht, nicht einem zweiten Algorithmus. Unminify-URLs zielen auf komprimierte Produktionsausgabe. Beautify-URLs zielen auf Quellcode, den Sie schon für lesbar halten, aber einheitlich einrücken wollen. Die längere Formatter-Tour ist der Code-Beautifier-Leitfaden.
Liegt die Datei schon auf der Platte und Ihr Team nutzt Prettier oder die eingebauten JS- und CSS-Sprachdienste, leistet Format Document dieselbe Art von Arbeit. Es ändert Whitespace, keine Symbole. Nutzen Sie FastMinify, wenn der Ausschnitt in einem Ticket, in einer CDN-Antwort oder auf einem Rechner ohne Ihr Editor-Profil liegt. Keiner der beiden Wege stellt umbenannte Namen wieder her.
Was als Nächstes
Gehen Sie beim Debuggen von minifiziertem JS und CSS in dieser Reihenfolge vor. Nutzen Sie Source Maps, falls vorhanden, dann Pretty-Print in DevTools, wenn nur die abstürzende Zeile nötig ist, und einen Browser-Unminifier erst, wenn Maps fehlen und Sie eine formatierte Kopie brauchen. Die Unminify- und Beautify-Seiten von FastMinify rücken den Code mit js-beautify neu ein, sie machen Mangling nicht rückgängig. Für die Vertiefung zu Chrome und Maps halten Sie den JavaScript-Debugging-Leitfaden bereit. Für das tägliche Formatieren bereits lesbaren Quellcodes nutzen Sie die Beautify-URLs.
Maps fehlen und Sie brauchen lokal eingerücktes JS oder CSS? Im Browser formatieren, dann zurück zu DevTools.
Verwandte Artikel

HTTP/2 und HTTP/3 ändern den Weg der Dateien, nicht ihre Größe. Messungen zu Größe, Kompilierzeit und Bundling zeigen, was Minifizierung noch bringt.

Rechnen Sie eine Unix-Epoche in ein lesbares Datum um und zurück, unterscheiden Sie Sekunden und Millisekunden und meiden Sie Zeitzonen-, JWT- und Zeitumstellungsfallen.

Lesen Sie einen Cron-Ausdruck Feld für Feld, prüfen Sie die nächsten Ausführungen in UTC oder Ortszeit und meiden Sie Fallen bei Schritten und Zeitzonen.