Transpilasiya: nədir, prosesi və kod çevirmə alətləri

Müəllif: IT Sectr Dərc olunub: 2026-05-19 Oxuma vaxtı: 8 dəq

Transpilasiya — mənbə kodunun bir proqramlaşdırma dilindən digərinə eyni abstraksiya səviyyəsində çevrilməsi. Maşın koduna kompilyasiyadan fərqli olaraq, transpilasiya kodu yüksək səviyyəli dillər arasında tərcümə edir: TypeScript-dən JavaScript-ə, Kotlin-dən Java-ya, Dart-dan JavaScript-ə. Babel Documentation-a görə, Babel həftədə 35+ milyon yüklənmə və yüzlərlə plagin dəstəyi ilə ən populyar transpilatordur.

Əsas məqamlar

  • Transpilasiya — kodun eyni abstraksiya səviyyəsində dillər arasında tərcüməsi (mənbədən-mənbəyə kompilyasiya)
  • Babel — müasir JavaScript-in (ES6+) köhnə brauzerlər üçün uyğun ES5-ə transpilatoru
  • TypeScript tsc vasitəsilə JavaScript-ə kompilyasiya olunur — tipləri silən və ES-ə çevirən transpilator
  • Kotlin/Native və Kotlin/JS — Kotlin-in platformalararası inkişaf üçün native kod və JavaScript-ə transpilasiyası
  • Dart web üçün JavaScript-ə (dart2js) və mobil platformalar üçün native kod-a (dart2native) kompilyasiya olunur

Transpilasiya nədir?

Transpilasiya (mənbədən-mənbəyə kompilyasiya) — proqramın bir proqramlaşdırma dilindən digərinə abstraksiya səviyyəsini qoruyaraq tərcümə prosesi. Transpilator A dilində mənbə kodu qəbul edir və hədəf mühitdə icra oluna bilən B dilində ekvivalent kod yaradır. Tipik nümunələr: TypeScript-dən JavaScript-ə, SASS-dan CSS-ə, Haxe-dən bir neçə hədəf dilə.

Transpilasiya kompilyasiyadan fərqlənir ki, çıxış kodu yüksək səviyyədə qalır və insan tərəfindən oxuna bilər (baxmayaraq ki, bunun üçün nəzərdə tutulmayıb). Kompilyator (GCC, LLVM, javac) kodu maşın koduna və ya bayt koduna — oxunmayan formata çevirir. Transpilator əlavə kompilyasiya oluna və ya minifikasiya oluna bilən kod yaradır.

Transpilasiya niyə lazımdır. Əsas səbəb uyğunluqdur. Tərtibatçılar müasir dillərdən (tiplərlə TypeScript, null safety ilə Kotlin) istifadə etmək istəyirlər, lakin hədəf platforma yalnız JavaScript və ya Java-nı dəstəkləyir. Transpilasiya müasir dildə yazmağa, lakin hədəf mühit üçün başa düşülən kodu yerləşdirməyə imkan verir.

Populyar transpilatorlar

TranspilatorMənbə → HədəfTətbiq
BabelES6+/TypeScript → ES5Veb inkişaf, React, Vue
tsc (TypeScript Compiler)TypeScript → JavaScriptTypeScript-də istənilən tətbiqlər
kotlinc-jsKotlin → JavaScriptKotlin/JS, React Kotlin Wrappers
dart2jsDart → JavaScriptFlutter Web, AngularDart
SWCTypeScript/JS → ES5Next.js, Rust üzərində qurma

Transpilasiya vs kompilyasiya: əsas fərqlər

Abstraksiya səviyyəsi — əsas fərq. Transpilator kodu eyni səviyyəli dillər arasında tərcümə edir (yüksək səviyyəli → yüksək səviyyəli). Kompilyator yüksək səviyyədən aşağı səviyyəyə (maşın kodu, bayt kodu) çevirir. LLVM IR aralıq təmsilçilikdir, lakin yenə də mənbə C++ və ya Rust-dan aşağı səviyyəlidir.

Nəticənin oxunaqlılığı — ikinci fərq. Transpilasiya nəticəsi (TypeScript-dən JavaScript) oxuna bilər və brauzerdə debug edilə bilər. Kompilyasiya nəticəsi (C++-dan maşın kodu) oxumaq üçün nəzərdə tutulmayıb — onun analizi dezasembler tələb edir. Source maps transpilasiya olunmuş kodu mənbə kodu ilə əlaqələndirərək debug etməyə kömək edir.

CI/CD kontekstində transpilasiya

CI/CD pipeline-larında transpilasiya qurma mərhələsində (build stage) icra olunur. TypeScript layihələri üçün tsc və ya Babel Docker konteynerində işə salınır, JavaScript və source maps yaradır, sonra minifikasiya olunur və serverə və ya tətbiq mağazasına yerləşdirilir. Transpilasiya nəticələrinin keşləşdirilməsini konfiqurasiya etmək vacibdir — tsc --incremental işə salmalar arasında asılılıq qrafını saxlayır, qurma vaxtını 30–50% azaldır.

Mobil layihələr (React Native) üçün Metro Bundler vasitəsilə transpilasiya hər nəşrdə CI serverində icra olunur. Sürətləndirmək üçün keş kataloqları (tmp/metro-cache) və --workers vasitəsilə paralel qurma istifadə olunur. GitHub Actions və GitLab CI işə salmalar arasında node_modules və .cache kataloqlarının keşləşdirilməsini dəstəkləyir, bu pipeline vaxtını qısaltmaq üçün kritikdir.

İcra sürəti də fərqlənir. Maşın koduna kompilyasiya maksimum performans verir. Transpilasiya abstraksiya səviyyəsinin overheadini saxlayır: TypeScript-dən JavaScript eyni adi JavaScript sürəti ilə icra olunur. Optimizasiyalar (TypeScript --strict) analiz mərhələsində işləyir, icra mərhələsində deyil.

Populyar transpilasiya ssenariləri

Ssenari 1: TypeScript → JavaScript — ən kütləvi ssenari. Tərtibatçı tiplərlə TypeScript-də yazır, tsc və ya Babel kompilyatoru tip annotasiyalarını silir və təmiz JavaScript yaradır. Bütün Angular layihələri və React layihələrinin əksəriyyəti (2026) TypeScript transpilasiyasından istifadə edir. State of JS 2025 statistikasına görə, sorğuda iştirak edən tərtibatçıların 79%-i əsas layihələrində TypeScript-dən istifadə edir.

Ssenari 2: Kotlin → JavaScript — Full-Stack inkişaf üçün Kotlin/JS-də istifadə olunur. Kotlin kodu Kotlin Compiler vasitəsilə IR (Intermediate Representation) ilə JavaScript-ə kompilyasiya olunur. Kotlin/JS xarici JS kitabxanaları ilə inteqrasiya üçün TypeScript tipli bəyannamələri (.d.ts) dəstəkləyir. JetBrains öz məhsullarında web interfeysləri üçün Kotlin/JS istifadə edir.

Ssenari 3: SASS/SCSS → CSS — CSS preprosessorlarının transpilasiyası. Dart Sass (tövsiyə olunan tətbiq) .scss fayllarını .css-ə transpilə edir, miksinləri, dəyişənləri, iç-içə qaydaları və funksiyaları genişləndirir. Bu kompilyasiya deyil (CSS CSS olaraq qalır), sintaksis genişləndirməsi ilə transpilasiyadır.

Müqayisə: Transpilasiya vs Kompilyasiya vs Interpretasiya

ParametrTranspilasiyaKompilyasiyaInterpretasiya
Giriş → ÇıxışYüksək səviyyəli → Yüksək səviyyəliYüksək səviyyəli → Maşın koduKod → Anında icra
NümunəTypeScript → JavaScriptC++ → ARM/x86Python → CPython runtime
Çıxış kodu oxunaqlıBəliXeyrYox
PerformansHədəf dili kimiMaksimumKompilyasiyadan aşağı
Runtime tələb edirXeyr (təmiz hədəf kod)XeyrBəli

Babel: müasir JavaScript-in transpilasiyası

Babel — ən geniş yayılmış JavaScript transpilatoru, ES6+/ESNext kodunu ES5-uyğun JavaScript-ə çevirir. Babel plagin və preset sistemi vasitəsilə işləyir: hər plagin bir transformasiyaya cavabdehdir (arrow functions, async/await, optional chaining). @babel/preset-env hədəf brauzerlər (browserslist) əsasında lazımi plaginləri avtomatik müəyyən edir.

Babel arxitekturası üç mərhələdən ibarətdir: pars etmə (parsing) → transformasiya (transformation) → generasiya (generation). Parser (Babylon/@babel/parser) mənbə kodunu AST-yə (Abstract Syntax Tree) çevirir. Transformerlər (plaginlər) AST-ni dəyişdirir. Generator (@babel/generator) dəyişdirilmiş AST-dən çıxış kodu yaradır.

Nümunə: Babel vasitəsilə transpilasiya

js
// Mənbə ES6+ kodu
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-dən sonra (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 çevirdi: arrow funksiyasını function expression-a, standart parametri (name = “World”) void 0 yoxlamasına, template string-i konkatenasiyaya, class-ı funksiya-konstruktora və optional chaining (?.) üçlü operatorlar zəncirinə. const uyğunluq üçün var ilə əvəz olundu ES5 mühitləri.

TypeScript: tip sistemi ilə transpilasiya

TypeScript — ciddi tipli dil, JavaScript-ə transpilə olunur. tsc kompilyatoru (TypeScript Compiler) iki tapşırığı yerinə yetirir: tip yoxlaması (type checking) və transpilasiya (emit). Başa düşmək vacibdir: tip yoxlaması və transpilasiya müstəqil mərhələlərdir. Tip yoxlaması olmadan transpilasiya etmək (--noEmitOnError false) və ya kod generasiyası olmadan yoxlama (--noEmit true) mümkündür.

TypeScript transpilasiyası bütün tip annotasiyalarını, interfeysləri, tip aliaslarını və generic parametrləri silir — JavaScript-də onlar yoxdur. Enum-lar obyektlərə, dekoratorlar funksiya çağırışlarına, async/await generatorlara (əgər target ES2017-dən aşağıdırsa) çevrilir. tsconfig.json target (JavaScript versiyası), module (modul sistemi), strict (tip yoxlama dərəcəsi) və outDir (çıxış qovluğu) idarə edir.

Transpilasiya üçün TypeScript konfiqurasiyası

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” tsc-yə ES6 sintaksisi ilə JavaScript yaratmağı göstərir (arrow funksiyalar, class-lar, let/const). module: “esnext” sonrakı Tree Shaking üçün ES modullarını (import/export) qoruyur Webpack-də. strict: true bütün tip yoxlamalarını aktiv edir (strictNullChecks, noImplicitAny, strictFunctionTypes). declaration: true kitabxananın TypeScript istehlakçıları üçün .d.ts faylları yaradır.

Mobil inkişafda transpilasiya

React Native JavaScript/TypeScript-i JavaScriptCore (iOS) və ya Hermes (Android) tərəfindən icra olunan koda transpilə etmək üçün Babel və Metro-dan istifadə edir. Babel plaginləri JSX transformasiyası, Flow/TypeScript annotasiyaları və React Native-ə xas optimizasiyalar əlavə edir. Metro Bundler əlavə olaraq modulları birləşdirir və inkişaf üçün Hot Module Replacement icra edir.

Flutter Dart transpilasiyasından istifadə edir. Flutter Web üçün dart2js Dart-ı optimallaşdırılmış JavaScript-ə transpilə edir. Flutter Mobile üçün dart2native Dart-ı native ARM koduna kompilyasiya edir. Flutter həmçinin inkişaf üçün Dart DevCompiler (dartdevc) dəstəkləyir — Dart-ı daha sürətli, lakin az optimallaşdırma ilə JavaScript-ə transpilə edir.

Nümunə: React Native üçün Babel konfiqurasiyası

js
// babel.config.js — React Native transpilasiyası
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 React Native üçün bütün lazımi plaginləri ehtiva edir: JSX, Flow/TypeScript, Metro modul sistemi, async/await, class properties və dekoratorlar. module-resolver plagini qısa importlar üçün aliaslar əlavə edir (@/components/Button əvəzinə ../../components/Button). İstehsal rejimində transform-remove-console koddan bütün console.log-ları silir.

Tez-tez verilən suallar

Transpilasiya kompilyasiyadan sadə sözlərlə necə fərqlənir?

Transpilasiya kodu bir dildən digərinə eyni səviyyədə tərcümə edir (məsələn, TypeScript → JavaScript). Kompilyasiya yüksək səviyyədən aşağı səviyyəyə tərcümə edir (C++ → maşın kodu). Transpilasiya nəticəsi oxunaqlıdır, kompilyasiya nəticəsi — yox.

React Native üçün transpilasiya lazımdırmı?

React Native defolt olaraq transpilasiya tələb edir — Metro Bundler JSX, TypeScript və müasir JavaScript-i JavaScriptCore və Hermes ilə uyğun koda çevirmək üçün Babel-dən istifadə edir. Babel olmadan React Native komponentlərin JSX sintaksisini icra edə bilməz.

TypeScript-dən tsc olmadan istifadə etmək olarmı?

Olarlar: Babel @babel/preset-typescript və SWC ilə TypeScript transpilasiyasını dəstəkləyir. Bu tsc-dən sürətlidir, lakin Babel tip yoxlaması aparmır — yalnız tip annotasiyalarını silir. Tip yoxlaması üçün tsc --noEmit ayrıca əmr kimi və ya fork-ts-checker-webpack-plugin vasitəsilə işə salınmalıdır.

Transpilasiya kontekstində source maps nədir?

Source maps — transpilə olunmuş kodu mənbə kodu ilə əlaqələndirən fayllar. Brauzerdə TypeScript-i debug etməyə imkan verir: dayanma nöqtələri .ts fayllarında qoyulur, stack trace-lər .ts sətirlərini göstərir, .js yox. Source maps olmadan transpilə olunmuş kodun debug edilməsi praktiki olaraq mümkün deyil.

Transpilasiya performansa necə təsir edir?

Transpilasiyanın özü tətbiqin performansına təsir etmir — çıxış kodu hədəf dildə native yazılmış kodla eyni sürətlə icra olunur. Overhead yalnız transpilator optimal olmayan kod yaratdıqda yaranır (məsələn, Babel massiv metodları üçün həcmli polifillər yarada bilər).

Nəticə

  • Transpilasiya — kodun eyni abstraksiya səviyyəsində dillər arasında çevrilməsi (mənbədən-mənbəyə kompilyasiya)
  • Babel — plagin sistemi və avtomatik konfiqurasiya üçün @babel/preset-env ilə əsas JavaScript transpilatoru
  • TypeScript tsc vasitəsilə JavaScript-ə transpilə olunur, tip annotasiyalarını silir və müasir sintaksisi çevirir
  • React Native JSX, TypeScript və ES6+-nı uyğun koda transpilə etmək üçün Babel və Metro-dan istifadə edir
  • Transpilasiya vs kompilyasiya: transpilasiya yüksək abstraksiya səviyyəsini qoruyur, kompilyasiya maşın koduna çevirir
  • Source maps transpilə olunmuş kodun debug edilməsi üçün məcburidir və yaradılan kodu mənbə kodu ilə əlaqələndirir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun