Was dieses Tool findet
Moderne Websites liefern eine einzige JavaScript-Datei aus, gebaut aus Hunderten Quelldateien. Dieses Tool schaut in diese Datei hinein und versucht, die ursprünglichen Modulgrenzen zu rekonstruieren – bundler-unabhängig, anhand der echten AST-Form statt Textmustern, die sofort versagen, sobald der Code minifiziert ist.
Es versucht, in dieser Reihenfolge:
- webpacks function-map-Form — eine IIFE, deren Argument ein Objekt oder Array ist, in dem jeder Eintrag eine
(module, exports, require)-Funktion ist. Das erkennt auch den klassischenwebpackUniversalModuleDefinition-Wrapper, egal wie tief der eigentliche Modulkarten-Aufruf verschachtelt ist. - webpacks chunk-push-Form —
(self.webpackChunkXxx = self.webpackChunkXxx || []).push([ids, {modules}, runtime]), die Form, die das Code-Splitting von webpack 5 erzeugt. - Rollup-/esbuild-/Vite-Kommentarbanner — manche unminifizierten Builds dieser Familie behalten vor dem Code jedes Moduls einen
// pfad/zur/datei.js-Zeilenkommentar. Wenn vorhanden, werden daraus die Modulgrenzen. - Ehrlicher Fallback — wenn nichts davon gefunden wird (fast immer weil das Bundle ein minifizierter, scope-gehoisteter Rollup-/esbuild-/Vite-Build ohne jegliche Grenzmarker ist), sagt das Tool das offen und listet stattdessen die Top-Level-Deklarationen der Datei, statt eine Modulliste zu erfinden.
Das Ergebnis lesen
Wenn Module gefunden werden, listet jedes auf, was es per literaler Modul-ID require()t, und ebenso nützlich, welche anderen Module es selbst benötigen — so lässt sich „was bricht, wenn ich das entferne" in beide Richtungen nachverfolgen, ohne irgendetwas auszuführen.
Ehrlichkeit als Designprinzip
Dynamische Requires (require(variable)) und import()-Aufrufe lassen sich nicht statisch auflösen und werden deshalb einfach aus der Abhängigkeitsliste weggelassen — das kann Abhängigkeiten unterzählen, aber nie eine erfinden. Ebenso wird eine Modul-ID, die von einem require()-Aufruf referenziert wird, aber nicht in der erkannten Karte steckt, weiterhin als Kantenziel angezeigt, auch ohne eigene Karte; das bedeutet meist, dass sie in einem anderen, hier nicht eingefügten Chunk lebt.
Datenschutz
Alles läuft im Browser über einen echten JavaScript-Parser (acorn). Das eingefügte oder hochgeladene Bundle wird niemals irgendwohin gesendet.
Tiny Online Tools







