Transpiláció: mi ez, folyamata és a kódátalakító eszközök

Szerző: IT Sectr Megjelenés: 2026-05-19 Olvasási idő: 8 perc

Transpiláció — forráskód átalakítása egyik programozási nyelvből a másikba az absztrakció azonos szintjén. Ellentétben a gépi kódba történő fordítással, a transpiláció magas szintű nyelvek között fordítja a kódot: TypeScript JavaScriptbe, Kotlin Java-ba, Dart JavaScriptbe. A Babel Documentation szerint a Babel a legnépszerűbb transpilátor heti 35+ millió letöltéssel és több száz bővítmény támogatásával.

Főbb pontok

  • Transpiláció — kód fordítása azonos absztrakciós szintű nyelvek között (source-to-source fordítás)
  • Babel — modern JavaScript (ES6+) transpilátora kompatibilis ES5-be régi böngészőkhöz
  • TypeScript JavaScriptbe fordul tsc-n keresztül — transpilátor, amely eltávolítja a típusokat és ES-be alakít
  • Kotlin/Native és Kotlin/JS — Kotlin transpilációja natív kódba és JavaScriptbe platformok közötti fejlesztéshez
  • Dart JavaScriptbe (dart2js) fordul a webhez és natív kódba (dart2native) mobil platformokhoz

Mi a transpiláció?

Transpiláció (source-to-source fordítás) — a program egyik programozási nyelvből a másikba történő fordításának folyamata, megtartva az absztrakció szintjét. A transpilátor bemeneti kódot fogad A nyelven, és egyenértékű kódot generál B nyelven, amely a célkörnyezetben végrehajtható. Tipikus példák: TypeScript JavaScriptbe, SASS CSS-be, Haxe több célnyelvre.

A transpiláció fordítástól abban különbözik, hogy a kimeneti kód magas szinten marad és ember által olvasható (bár nem erre szánták). A fordító (GCC, LLVM, javac) a kódot gépi kódba vagy bájtkódba — olvashatatlan formátumba alakítja. A transpilátor olyan kódot generál, amely tovább fordítható vagy kicsinyíthető.

Miért van szükség transpilációra. A fő ok a kompatibilitás. A fejlesztők modern nyelveket szeretnének használni (TypeScript típusokkal, Kotlin null safety-vel), de a célplatform csak JavaScriptet vagy Java-t támogat. A transpiláció lehetővé teszi a modern nyelven írást és a célkörnyezet számára érthető kód telepítését.

Népszerű transpilátorok

TranspilátorForrás → CélAlkalmazás
BabelES6+/TypeScript → ES5Webfejlesztés, React, Vue
tsc (TypeScript Compiler)TypeScript → JavaScriptBármilyen TypeScript alkalmazás
kotlinc-jsKotlin → JavaScriptKotlin/JS, React Kotlin Wrappers
dart2jsDart → JavaScriptFlutter Web, AngularDart
SWCTypeScript/JS → ES5Next.js, építés Rust-on

Transpiláció vs fordítás: kulcsfontosságú különbségek

Absztrakció szintje — a fő különbség. A transpilátor kódot fordít azonos szintű nyelvek között (magas szint → magas szint). A fordító magas szintről alacsony szintre (gépi kód, bájtkód) alakít. Az LLVM IR egy köztes reprezentáció, de még mindig alacsonyabb szintű, mint a forrás C++ vagy Rust.

Eredmény olvashatósága — a második különbség. A transpiláció eredménye (JavaScript TypeScriptből) olvasható és debuggolható a böngészőben. A fordítás eredménye (gépi kód C++-ból) nem olvasásra szánt — elemzéséhez disassembler szükséges. A source maps segít a transpilált kód hibakeresésében, összekapcsolva azt a forráskóddal.

Transpiláció CI/CD kontextusban

A CI/CD csővezetékekben a transpiláció az építési szakaszban (build stage) történik. TypeScript projekteknél a tsc vagy Babel Docker konténerben fut, JavaScriptet és source map-eket generál, amelyeket aztán kicsinyítenek és telepítenek a szerverre vagy az alkalmazásboltba. Fontos a transpilációs eredmények gyorsítótárazásának beállítása — a tsc --incremental elmenti a függőségi gráfot a futtatások között, 30–50%-kal csökkentve az építési időt.

Mobil projekteknél (React Native) a transpiláció Metro Bundleren keresztül a CI szerveren történik minden publikáláskor. A gyorsításhoz gyorsítótár könyvtárakat (tmp/metro-cache) és párhuzamos építést használnak --workers segítségével. A GitHub Actions és GitLab CI támogatja a node_modules és .cache könyvtárak gyorsítótárazását a futtatások között, ami kritikus a csővezeték idő csökkentéséhez.

Végrehajtási sebesség is különbözik. A gépi kódba fordítás maximális teljesítményt nyújt. A transpiláció megtartja az absztrakciós szint többletterhelését: a TypeScriptből származó JavaScript ugyanolyan sebességgel fut, mint a hétköznapi JavaScript. Az optimalizálások (TypeScript --strict) az elemzési szakaszban működnek, nem a végrehajtási szakaszban.

Népszerű transpilációs forgatókönyvek

Forgatókönyv 1: TypeScript → JavaScript — a legelterjedtebb forgatókönyv. A fejlesztő TypeScriptben ír típusokkal, a tsc vagy Babel fordító eltávolítja a típusannotációkat és tiszta JavaScriptet generál. Minden Angular projekt és a legtöbb React projekt (2026) TypeScript transpilációt használ. A State of JS 2025 statisztikája szerint a megkérdezett fejlesztők 79%-a használ TypeScriptet fő projektjeiben.

Forgatókönyv 2: Kotlin → JavaScript — Kotlin/JS-ben használják Full-Stack fejlesztéshez. A Kotlin kód a Kotlin Compileren keresztül IR (Intermediate Representation) segítségével JavaScriptbe fordul. A Kotlin/JS támogatja a TypeScript-tipusú deklarációkat (.d.ts) külső JS könyvtárakkal való integrációhoz. A JetBrains Kotlin/JS-t használ termékeiben webes felületekhez.

Forgatókönyv 3: SASS/SCSS → CSS — CSS előfeldolgozók transpilációja. A Dart Sass (ajánlott implementáció) .scss-t .css-be transpilál, kiterjesztve a mixineket, változókat, beágyazott szabályokat és függvényeket. Ez nem fordítás (a CSS CSS marad), hanem transpiláció szintaktikai kiterjesztéssel.

Összehasonlítás: Transpiláció vs Fordítás vs Értelmezés

ParaméterTranspilációFordításÉrtelmezés
Bemenet → KimenetMagas szint → Magas szintMagas szint → Gépi kódKód → Azonnali végrehajtás
PéldaTypeScript → JavaScriptC++ → ARM/x86Python → CPython runtime
Kimeneti kód olvashatóIgenNemN/A
TeljesítményMint a célnyelvMaximálisAlacsonyabb, mint a fordítás
Runtime-ot igényelNem (tiszta célkód)NemIgen

Babel: modern JavaScript transpilációja

Babel — a legelterjedtebb JavaScript transpilátor, amely ES6+/ESNext kódot ES5-kompatibilis JavaScriptbe alakít. A Babel bővítmények és presetek rendszerén keresztül működik: minden bővítmény egy transzformációért felelős (arrow functions, async/await, optional chaining). A @babel/preset-env automatikusan meghatározza a szükséges bővítményeket a célböngészők (browserslist) alapján.

A Babel architektúrája három szakaszból áll: elemzés (parsing) → transzformáció (transformation) → generálás (generation). Az elemző (Babylon/@babel/parser) a forráskódot AST-vé (Abstract Syntax Tree) alakítja. A transzformátorok (bővítmények) módosítják az AST-t. A generátor (@babel/generator) a módosított AST-ből hozza létre a kimeneti kódot.

Példa: transpiláció Babel segítségével

js
// Forrás ES6+ kód
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
// Babel után (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 átalakította: a nyílfüggvényt function expression-né, az alapértelmezett paramétert (name = „World“) void 0 ellenőrzéssé, a template stringet konkatenációvá, az osztályt konstruktor függvénnyé és az optional chaining-et (?.) ternáris operátorok láncává. A const var-ra cserélődött az ES5 környezetekkel való kompatibilitásért.

TypeScript: transpiláció típusrendszerrel

TypeScript — szigorúan típusos nyelv, amely JavaScriptbe transpilálódik. A tsc fordító (TypeScript Compiler) két feladatot lát el: típusellenőrzés (type checking) és transpiláció (emit). Fontos megérteni: a típusellenőrzés és a transpiláció független szakaszok. Lehet transpilációt végezni típusellenőrzés nélkül (--noEmitOnError false) vagy ellenőrzést kódgenerálás nélkül (--noEmit true).

TypeScript transpiláció eltávolítja az összes típusannotációt, interfészt, típusaliast és generikus paramétert — a JavaScriptben ezek nem léteznek. Az enum-ok objektumokká, a dekorátorok függvényhívásokká, az async/await generátorokká alakulnak (ha a target ES2017 alatt van). A tsconfig.json kezeli a target-et (JavaScript verzió), module-t (modulrendszer), strict-et (típusellenőrzés mértéke) és outDir-t (kimeneti mappa).

TypeScript konfiguráció transpilációhoz

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“ utasítja a tsc-t, hogy JavaScriptet generáljon ES6 szintaxissal (nyílfüggvények, osztályok, let/const). module: „esnext“ megtartja az ES modulokat (import/export) a későbbi Tree Shaking-hez a Webpackben. strict: true bekapcsolja az összes típusellenőrzést (strictNullChecks, noImplicitAny, strictFunctionTypes). declaration: true .d.ts fájlokat generál a könyvtár TypeScript fogyasztói számára.

Transpiláció a mobilfejlesztésben

React Native Babel-t és Metro-t használ a JavaScript/TypeScript transpilálásához olyan kódba, amelyet a JavaScriptCore (iOS) vagy Hermes (Android) hajt végre. A Babel bővítmények JSX transzformációt, Flow/TypeScript annotációkat és React Native-specifikus optimalizálásokat adnak hozzá. A Metro Bundler emellett egyesíti a modulokat és Hot Module Replacement-et hajt végre fejlesztéshez.

Flutter Dart transpilációt használ. Flutter Web esetén a dart2js Dart-t optimalizált JavaScriptbe transpilál. Flutter Mobile esetén a dart2native Dart-t natív ARM kódba fordítja. A Flutter emellett támogatja a Dart DevCompiler-t (dartdevc) fejlesztéshez — gyorsabban transpilál Dart-t JavaScriptbe, de kevesebb optimalizálással.

Példa: Babel konfiguráció React Native-hoz

js
// babel.config.js — React Native transpiláció
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 tartalmazza az összes szükséges bővítményt React Native-hoz: JSX, Flow/TypeScript, Metro modulrendszer, async/await, class properties és dekorátorok. A module-resolver bővítmény aliasokat ad a rövid importokhoz (@/components/Button a ../../components/Button helyett). Termelési módban a transform-remove-console eltávolítja az összes console.log-ot a kódból.

Gyakran Ismételt Kérdések

Miben különbözik a transpiláció a fordítástól egyszerű szavakkal?

Transpiláció kódot fordít egyik nyelvről a másikra azonos szinten (pl. TypeScript → JavaScript). Fordítás magas szintről alacsony szintre fordít (C++ → gépi kód). A transpiláció eredménye olvasható, a fordításé — nem.

Szükséges-e a transpiláció a React Native-hoz?

React Native alapértelmezetten transpilációt igényel — a Metro Bundler Babel-t használ a JSX, TypeScript és modern JavaScript átalakításához a JavaScriptCore-val és Hermes-szel kompatibilis kódba. Babel nélkül a React Native nem tudja végrehajtani a komponensek JSX szintaxisát.

Használható-e a TypeScript tsc nélkül?

Igen: A Babel @babel/preset-typescript-tel és az SWC támogatja a TypeScript transpilációt. Ez gyorsabb, mint a tsc, de a Babel nem végez típusellenőrzést — csak eltávolítja a típusannotációkat. A típusellenőrzéshez a tsc --noEmit-et külön parancsként vagy fork-ts-checker-webpack-plugin segítségével kell futtatni.

Mi a source maps a transpiláció kontextusában?

Source maps — fájlok, amelyek összekapcsolják a transpilált kódot a forráskóddal. Lehetővé teszik a TypeScript hibakeresését a böngészőben: a töréspontok .ts fájlokba kerülnek, a stack trace-ek .ts sorokat mutatnak, nem .js-t. Source maps nélkül a transpilált kód hibakeresése gyakorlatilag lehetetlen.

Hogyan befolyásolja a transpiláció a teljesítményt?

Maga a transpiláció nem befolyásolja az alkalmazás teljesítményét — a kimeneti kód ugyanolyan sebességgel fut, mint a célnyelven natívan írt kód. Többletterhelés csak akkor keletkezik, ha a transpilátor nem optimális kódot generál (pl. a Babel terjedelmes polyfill-eket hozhat létre tömbmetódusokhoz).

Összegzés

  • Transpiláció — kód átalakítása azonos absztrakciós szintű nyelvek között (source-to-source fordítás)
  • Babel — a fő JavaScript transpilátor bővítményrendszerrel és @babel/preset-env-vel automatikus konfigurációhoz
  • TypeScript tsc-n keresztül transpilálódik JavaScriptbe, eltávolítva a típusannotációkat és átalakítva a modern szintaxist
  • React Native Babel-t és Metro-t használ a JSX, TypeScript és ES6+ kompatibilis kódba transpilálásához
  • Transpiláció vs fordítás: a transpiláció megtartja a magas absztrakciós szintet, a fordítás gépi kódba alakít
  • Source maps kötelező a transpilált kód hibakereséséhez és összekapcsolja a generált kódot a forráskóddal

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is