Ein Skript lesbar formatieren oder für die Auslieferung minifizieren. Die Engines — Prettier 3.9.6 fürs Formatieren, Terser 5.44.0 fürs Minifizieren — kommen von dieser Seite und laufen im Browser; der Code verlässt die Seite nicht.
Läuft lokal in deinem BrowserFormat bringt ein Skript in eine lesbare Form, Minify macht es kleiner, damit der Server weniger Bytes überträgt. Formatiert wird mit Prettier 3.9.6, minifiziert mit Terser 5.44.0; beide Engines liegen im Verzeichnis /static/vendor dieser Seite und arbeiten nur mit dem Text im Browser-Tab.
Die Einrückung gehört allein zu Format: Tabulator, 2, 4 oder 8 Leerzeichen, voreingestellt sind 4. Formatieren lässt das Programm unverändert — es ändert Anführungszeichen, Abstände und Zeilenumbrüche. Minify verdichtet zusätzlich Ausdrücke und kürzt lokale Namen; solcher Code gehört getestet wie jede umgeschriebene Fassung.
Prettier liest das Skript ein und druckt es in einem festen Stil wieder aus: Zeichenketten stehen danach in doppelten Anführungszeichen, fehlende Semikolons werden ergänzt, die gewählte Einrückung wird angewendet, und Zeilen über 80 Spalten werden umbrochen. Eine Funktion mit 300 Anweisungen kam Anweisung für Anweisung zurück, Kommentare inbegriffen — geändert hat sich nur das Layout.
Weil die Ausgabe über einen Parser läuft, bleibt das Ergebnis auch anderswo vorhersagbar: Was hier formatiert wird, parst auch Node.js oder ein Bundler, und was hier scheitert, scheitert dort aus demselben Grund. Die Meldungen stammen vom Parser, etwa „Unexpected token (1:8)“ mit markierter Zeile — genau das ergibt const x: number = 1, denn dem Babel-Parser fehlt das TypeScript-Plugin.
Terser führt einen Kompressionsdurchlauf aus und kürzt Namen innerhalb von Funktionen; Namen auf oberster Ebene bleiben erhalten, damit exportierte Funktionen weiterhin unter dem importierten Namen laufen. Kommentare verschwinden, ausgenommen Banner, die mit /*! beginnen oder @license enthalten. Konstantenfaltung reicht weiter als Umbenennen: Eine Funktion mit 300 Zeilen, die 299 Konstanten addierte, kam als „function longName(n,e){return n+e+299}“ zurück — aus 11.534 Zeichen wurden 38.
Minifizierter Code ist deshalb nicht mehr Ihr Quelltext. Inhalte von Zeichenketten und Template-Literalen bleiben erhalten, private Klassenfelder, optionales Verketten und BigInt-Literale überstehen den Durchlauf, und ein Template ohne Platzhalter kann als einfache Zeichenkette zurückkommen. Führen Sie die minifizierte Datei einmal aus, bevor Sie sie ausliefern; die Größenzeile zeigt, was der Durchlauf gebracht hat.
Formatieren versteht JSX, eine Shebang-Zeile, Import-Attribute wie import data from "./d.json" with { type: "json" } und Top-Level-await. Minify parst den Ausschnitt zuerst als klassisches Skript und bei einem Fehler erneut als ES-Modul; deshalb lassen sich import, export und Top-Level-await minifizieren, während Konstrukte wie with, die nur im Sloppy-Modus existieren, den Skriptweg behalten. Scheitern beide Versuche, erscheint die Meldung des Versuchs, der weiter in der Datei gekommen ist.
Zwei Grenzen sind vor dem Einfügen wichtig. TypeScript-Annotationen gehören nicht zum Parserumfang, const x: number = 1 endet also als Syntaxfehler statt als formatierte Zeile. Und Terser kennt kein JSX: Eine JSX-Komponente lässt sich formatieren, aber nicht minifizieren — „Unexpected token: operator (<) (line 1, column 19)“ zeigt auf das erste Tag. Minifizieren Sie daher den transpilierten Build statt der Quelle.
Der erste Druck auf Format lädt drei Dateien dieser Seite — Prettier standalone sowie die Plugins babel und estree, zusammen rund 600 KB —, der erste Druck auf Minify lädt das Terser-Bundle mit rund 1 MB. Danach greift der Browser-Cache: weitere Klicks lösen keine Anfrage aus, und mit abgeschaltetem Netz arbeitet die Seite weiter.
Ein Modul mit 68 KB und 500 exportierten Funktionen wurde in Chrome auf dem Desktop in etwa 250 ms formatiert und in etwa 230 ms minifiziert. Nichts davon wird hochgeladen: Die einzigen Anfragen des Werkzeugs betreffen seine eigenen Engine-Dateien, Quelltext, Syntaxbaum und Ergebnis bleiben im Tab.