Transpilation: Was es ist, Prozess und Code-Transformationswerkzeuge

Autor: IT Sectr Veröffentlicht: 2026-05-19 Lesezeit: 8 Min.

Transpilation ist die Konvertierung von Quellcode von einer Programmiersprache in eine andere auf derselben Abstraktionsebene. Im Gegensatz zur Kompilierung in Maschinencode übersetzt die Transpilation Code zwischen Hochsprachen: TypeScript in JavaScript, Kotlin in Java, Dart in JavaScript. Laut Babel Documentation ist Babel der beliebteste Transpiler mit über 35 Millionen wöchentlichen Downloads und der Unterstützung von Hunderten von Plugins.

Wichtige Punkte

  • Transpilation ist die Code-Übersetzung zwischen Sprachen derselben Abstraktionsebene (Source-to-Source-Kompilierung)
  • Babel transpiliert modernes JavaScript (ES6+) in kompatibles ES5 für ältere Browser
  • TypeScript wird über tsc in JavaScript kompiliert — ein Transpiler, der Typen entfernt und in ES konvertiert
  • Kotlin/Native und Kotlin/JS transpilieren Kotlin in nativen Code und JavaScript für plattformübergreifende Entwicklung
  • Dart wird für das Web in JavaScript (dart2js) und für mobile Plattformen in nativen Code (dart2native) kompiliert

Was ist Transpilation?

Transpilation (Source-to-Source-Kompilierung) ist der Prozess der Übersetzung eines Programms von einer Programmiersprache in eine andere unter Beibehaltung derselben Abstraktionsebene. Ein Transpiler nimmt Quellcode in Sprache A und erzeugt äquivalenten Code in Sprache B, der in der Zielumgebung ausgeführt werden kann. Typische Beispiele: TypeScript in JavaScript, SASS in CSS, Haxe in mehrere Zielsprachen.

Transpilation unterscheidet sich von der Kompilierung dadurch, dass der Ausgabecode auf einer hohen Ebene bleibt und von Menschen gelesen werden kann (auch wenn dies nicht beabsichtigt ist). Ein Compiler (GCC, LLVM, javac) übersetzt Code in Maschinencode oder Bytecode — ein unlesbares Format. Ein Transpiler erzeugt Code, der weiter kompiliert oder minifiziert werden kann.

Warum Transpilation benötigt wird. Der Hauptgrund ist die Kompatibilität. Entwickler möchten moderne Sprachen (TypeScript mit Typen, Kotlin mit Null-Sicherheit) verwenden, aber die Zielplattform unterstützt nur JavaScript oder Java. Transpilation ermöglicht das Schreiben in einer modernen Sprache, während Code bereitgestellt wird, der für die Zielumgebung verständlich ist.

Beliebte Transpiler

TranspilerQuelle → ZielAnwendung
BabelES6+/TypeScript → ES5Webentwicklung, React, Vue
tsc (TypeScript Compiler)TypeScript → JavaScriptJede TypeScript-Anwendung
kotlinc-jsKotlin → JavaScriptKotlin/JS, React Kotlin Wrappers
dart2jsDart → JavaScriptFlutter Web, AngularDart
SWCTypeScript/JS → ES5Next.js, Rust-basiertes Bündeln

Transpilation vs. Kompilierung: Hauptunterschiede

Abstraktionsebene ist der Hauptunterschied. Ein Transpiler übersetzt Code zwischen Sprachen derselben Ebene (Hochsprache → Hochsprache). Ein Compiler übersetzt von einer hohen auf eine niedrige Ebene (Maschinencode, Bytecode). LLVM IR ist eine Zwischendarstellung, liegt aber immer noch auf einer niedrigeren Ebene als das ursprüngliche C++ oder Rust.

Lesbarkeit des Ergebnisses ist der zweite Unterschied. Das Ergebnis der Transpilation (JavaScript aus TypeScript) ist lesbar und kann im Browser debuggt werden. Das Ergebnis der Kompilierung (Maschinencode aus C++) ist nicht zum Lesen gedacht — seine Analyse erfordert einen Disassembler. Source Maps helfen beim Debuggen von transpiliertem Code, indem sie ihn mit dem ursprünglichen Quellcode verknüpfen.

Transpilation im CI/CD-Kontext

In CI/CD-Pipelines wird die Transpilation in der Build-Phase durchgeführt. Bei TypeScript-Projekten werden tsc oder Babel in einem Docker-Container ausgeführt, generieren JavaScript und Source Maps, die dann minifiziert und auf einem Server oder im App Store bereitgestellt werden. Es ist wichtig, das Caching der Transpilationsergebnisse zu konfigurieren — tsc --incremental speichert den Abhängigkeitsgraphen zwischen den Läufen und reduziert die Build-Zeit um 30–50%.

Bei mobilen Projekten (React Native) wird die Transpilation über Metro Bundler bei jeder Veröffentlichung auf dem CI-Server ausgeführt. Cache-Verzeichnisse (tmp/metro-cache) und parallele Builds über --workers beschleunigen den Prozess. GitHub Actions und GitLab CI unterstützen das Caching von node_modules und .cache-Verzeichnissen zwischen Läufen, was für die Reduzierung der Pipeline-Zeit entscheidend ist.

Ausführungsgeschwindigkeit unterscheidet sich ebenfalls. Die Kompilierung in Maschinencode bietet maximale Leistung. Die Transpilation bewahrt den Overhead der Abstraktionsebene: JavaScript aus TypeScript läuft mit der gleichen Geschwindigkeit wie normales JavaScript. Optimierungen (TypeScript —strict) wirken in der Analysephase, nicht zur Laufzeit.

Beliebte Transpilationsszenarien

Szenario 1: TypeScript → JavaScript — das häufigste Szenario. Der Entwickler schreibt TypeScript mit Typen, der tsc-Compiler oder Babel entfernt Typannotationen und generiert reines JavaScript. Alle Angular-Projekte und die meisten React-Projekte (2026) verwenden TypeScript-Transpilation. Laut State of JS 2025 verwenden 79% der befragten Entwickler TypeScript in ihren Hauptprojekten.

Szenario 2: Kotlin → JavaScript — wird in Kotlin/JS für die Full-Stack-Entwicklung verwendet. Kotlin-Code wird über den Kotlin-Compiler mit IR (Intermediate Representation) in JavaScript kompiliert. Kotlin/JS unterstützt TypeScript-typisierte Deklarationen (.d.ts) für die Integration mit externen JS-Bibliotheken. JetBrains verwendet Kotlin/JS in seinen eigenen Produkten für Weboberflächen.

Szenario 3: SASS/SCSS → CSS — Transpilation von CSS-Präprozessoren. Dart Sass (die empfohlene Implementierung) transpiliert .scss in .css und erweitert Mixins, Variablen, verschachtelte Regeln und Funktionen. Dies ist keine Kompilierung (CSS bleibt CSS), sondern Transpilation mit syntaktischer Erweiterung.

Vergleich: Transpilation vs. Kompilierung vs. Interpretation

ParameterTranspilationKompilierungInterpretation
Eingabe → AusgabeHochsprache → HochspracheHochsprache → MaschinencodeCode → Sofortige Ausführung
BeispielTypeScript → JavaScriptC++ → ARM/x86Python → CPython-Laufzeit
Ausgabecode lesbarJaNeinN/A
LeistungWie ZielspracheMaximalNiedriger als Kompilierung
Erfordert LaufzeitNein (reiner Zielcode)NeinJa

Babel: Transpilation von modernem JavaScript

Babel ist der beliebteste JavaScript-Transpiler, der ES6+/ESNext-Code in ES5-kompatibles JavaScript umwandelt. Babel arbeitet über ein Plugin- und Preset-System: Jedes Plugin ist für eine Transformation verantwortlich (Pfeilfunktionen, async/await, optionale Verkettung). @babel/preset-env ermittelt automatisch die notwendigen Plugins basierend auf den Zielbrowsern (browserslist).

Die Babel-Architektur besteht aus drei Phasen: Parsen → Transformation → Generierung. Der Parser (Babylon/@babel/parser) wandelt Quellcode in einen AST (Abstract Syntax Tree) um. Transformatoren (Plugins) modifizieren den AST. Der Generator (@babel/generator) erzeugt Ausgabecode aus dem modifizierten AST.

Beispiel: Transpilation mit Babel

js
// Ursprünglicher ES6+-Code
const greet = (name = "World") => {
  return `Hello, ${name}!`;
};

class User {
  constructor(name) {
    this.name = name;
  }
}

const data = { user: { address: { city: "Moscow" } } };
const city = data?.user?.address?.city;
js
// Nach Babel (target: > 0.25%, not dead)
"use strict";

var greet = function (name) {
  if (name === void 0) { name = "World"; }
  return "Hello, " + name + "!";
};

var User = function (name) {
  this.name = name;
};

var data = { user: { address: { city: "Moscow" } } };
var city = data != null
  ? data.user != null
    ? data.user.address != null
      ? data.user.address.city
      : void 0
    : void 0
  : void 0;

Babel transformierte: die Pfeilfunktion in einen Funktionsausdruck, den Standardparameter (name = „World“) in eine void-0-Prüfung, die Vorlagenzeichenfolge in Verkettung, die Klasse in eine Konstruktorfunktion und die optionale Verkettung (?.) in eine Kette von ternären Operatoren. const wurde durch var für ES5-Kompatibilität ersetzt.

TypeScript: Transpilation mit Typsystem

TypeScript ist eine stark typisierte Sprache, die nach JavaScript transpiliert wird. Der tsc-Compiler (TypeScript Compiler) führt zwei Aufgaben aus: Typprüfung (Type Checking) und Transpilation (Emit). Es ist wichtig zu verstehen: Typprüfung und Transpilation sind unabhängige Phasen. Sie können Transpilation ohne Typprüfung (--noEmitOnError false) oder Typprüfung ohne Codegenerierung (--noEmit true) ausführen.

TypeScript-Transpilation entfernt alle Typannotationen, Schnittstellen, Typaliase und generischen Parameter — sie existieren in JavaScript nicht. Enums werden in Objekte, Dekorateure in Funktionsaufrufe, async/await in Generatoren (wenn target unter ES2017 liegt) umgewandelt. tsconfig.json steuert target (JavaScript-Version), module (Modulsystem), strict (Strenge der Typprüfung) und outDir (Ausgabeordner).

TypeScript-Konfiguration für Transpilation

json
{
  "compilerOptions": {
    "target": "es2015",
    "module": "esnext",
    "lib": ["es2015", "dom"],
    "strict": true,
    "outDir": "./dist",
    "rootDir": "./src",
    "esModuleInterop": true,
    "sourceMap": true,
    "declaration": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}

target: „es2015“ weist tsc an, JavaScript mit ES6-Syntax (Pfeilfunktionen, Klassen, let/const) zu generieren. module: „esnext“ bewahrt ES-Module (import/export) für nachfolgendes Tree Shaking in Webpack. strict: true aktiviert alle Typprüfungen (strictNullChecks, noImplicitAny, strictFunctionTypes). declaration: true generiert .d.ts-Dateien für TypeScript-Konsumenten der Bibliothek.

Transpilation in der mobilen Entwicklung

React Native verwendet Babel und Metro, um JavaScript/TypeScript in Code zu transpilieren, der von JavaScriptCore (iOS) oder Hermes (Android) ausgeführt werden kann. Babel-Plugins fügen JSX-Transformation, Flow/TypeScript-Annotationen und React Native-spezifische Optimierungen hinzu. Metro Bundler bündelt zusätzlich Module und führt Hot Module Replacement für die Entwicklung durch.

Flutter verwendet Dart-Transpilation. Für Flutter Web transpiliert dart2js Dart in optimiertes JavaScript. Für Flutter Mobile kompiliert dart2native Dart in nativen ARM-Code. Flutter unterstützt auch den Dart DevCompiler (dartdevc) für die Entwicklung — er transpiliert Dart schneller in JavaScript, aber mit weniger Optimierung.

Beispiel: Babel-Konfiguration für React Native

js
// babel.config.js — React Native Transpilation
module.exports = {
  presets: [
    ["module:metro-react-native-babel-preset"],
  ],
  plugins: [
    ["module-resolver", {
      root: ["."],
      alias: {
        "@": "./src",
        "@components": "./src/components",
      },
    }],
    "react-native-reanimated/plugin",
  ],
  env: {
    production: {
      plugins: ["transform-remove-console"],
    },
  },
};

metro-react-native-babel-preset enthält alle notwendigen Plugins für React Native: JSX, Flow/TypeScript, das Metro-Modulsystem, async/await, Klasseneigenschaften und Dekorateure. Das Plugin module-resolver fügt Aliase für kurze Importe hinzu (@/components/Button statt ../../components/Button). Im Produktionsmodus entfernt transform-remove-console alle console.log aus dem Code.

Häufig gestellte Fragen

Wie unterscheidet sich Transpilation in einfachen Worten von Kompilierung?

Transpilation übersetzt Code von einer Sprache in eine andere auf derselben Ebene (z. B. TypeScript → JavaScript). Kompilierung übersetzt von einer hohen auf eine niedrige Ebene (C++ → Maschinencode). Das Ergebnis der Transpilation ist lesbar, das der Kompilierung nicht.

Ist Transpilation für React Native erforderlich?

React Native erfordert standardmäßig eine Transpilation — Metro Bundler verwendet Babel, um JSX, TypeScript und modernes JavaScript in Code umzuwandeln, der mit JavaScriptCore und Hermes kompatibel ist. Ohne Babel kann React Native die JSX-Syntax von Komponenten nicht ausführen.

Kann TypeScript ohne tsc verwendet werden?

Ja: Babel mit @babel/preset-typescript und SWC unterstützen TypeScript-Transpilation. Dies ist schneller als tsc, aber Babel führt keine Typprüfung durch — es entfernt nur Typannotationen. Für die Typprüfung müssen Sie tsc --noEmit separat oder über fork-ts-checker-webpack-plugin ausführen.

Was sind Source Maps im Kontext der Transpilation?

Source Maps sind Dateien, die transpilierten Code mit dem ursprünglichen Quellcode verknüpfen. Sie ermöglichen das Debuggen von TypeScript im Browser: Haltepunkte werden in .ts-Dateien gesetzt, Stack-Traces zeigen .ts-Zeilen anstelle von .js. Ohne Source Maps ist das Debuggen von transpiliertem Code nahezu unmöglich.

Wie wirkt sich Transpilation auf die Leistung aus?

Die Transpilation selbst hat keine Auswirkungen auf die Anwendungsleistung — der Ausgabecode läuft mit der gleichen Geschwindigkeit wie nativ in der Zielsprache geschriebener Code. Overhead entsteht nur, wenn der Transpiler suboptimalen Code generiert (z. B. kann Babel umfangreiche Polyfills für Array-Methoden erstellen).

Zusammenfassung

  • Transpilation ist die Code-Konvertierung zwischen Sprachen derselben Abstraktionsebene (Source-to-Source-Kompilierung)
  • Babel ist der primäre JavaScript-Transpiler mit einem Plugin-System und @babel/preset-env für die automatische Konfiguration
  • TypeScript transpiliert über tsc nach JavaScript, das Typannotationen entfernt und moderne Syntax konvertiert
  • React Native verwendet Babel und Metro, um JSX, TypeScript und ES6+ in kompatiblen Code zu transpilieren
  • Transpilation vs. Kompilierung: Transpilation bewahrt eine hohe Abstraktionsebene, Kompilierung übersetzt in Maschinencode
  • Source Maps sind für das Debuggen von transpiliertem Code unerlässlich und verknüpfen den generierten Code mit dem ursprünglichen Quellcode

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch