Kotlin/JS — bu nima, JavaScript-ga kompilyator va xususiyatlari

Muallif: IT Sectr Nashr etilgan: 2026-06-05 O'qish vaqti: 7 daq

Kotlin/JS — Kotlin kodini JavaScript-ga aylantiruvchi, frontend-ilovalar va veb-interfeyslarni Kotlin tilida yaratish imkonini beruvchi kompilyatordir. TypeScript-dan farqli o'laroq, Kotlin/JS qattiq statik tiplash, korutinlarni qo'llab-quvvatlash va Kotlin Multiplatform bilan uzluksiz integratsiyani ta'minlaydi. Kotlin 1.8 dan boshlab, kompilyator optimallashtirilgan JavaScript kodini yaratish uchun IR-based backend-dan foydalanadi. JetBrains, 2025 ma'lumotlariga ko'ra, Kotlin/JS NPM ekotizimi va TypeScript bilan avtomatik .d.ts fayllarini yaratish orqali integratsiyani qo'llab-quvvatlaydi.

Asosiy nuqtalar

  • Kotlin/JS — frontend ishlab chiqish va veb-interfeyslar uchun Kotlin kodini JavaScript-ga aylantiruvchi kompilyator.
  • IR-backend — optimallashtirilgan JavaScript kodini yaratish uchun ishlatiladigan oraliq tasvir.
  • NPM integratsiyasi — build.gradle.kts da npm bog'liqliklari orqali JavaScript kutubxonalarini ulash imkoniyati.
  • TypeScript muvofiqligi — TypeScript loyihalarining Kotlin kodi bilan xavfsiz ishlashi uchun .d.ts fayllarini yaratish.
  • KMM integratsiyasi — mobil va veb-ilovalar o'rtasida umumiy Kotlin kodini qayta ishlatish.

Kotlin/JS nima?

Kotlin/JS — Kotlin kompilyatorining uchta backendidan biri (JVM va Native bilan birga), Kotlin kodini JavaScript-ga tarjima qilish uchun mo'ljallangan. JetBrains tomonidan ishlab chiqilgan Kotlin/JS, qattiq statik tiplashga ega tilda veb-ilovalar yozish, shu bilan birga tashqi deklaratsiyalar mexanizmi orqali JavaScript kutubxonalarining ulkan ekotizimiga kirishni saqlash imkonini beradi. Kotlin 1.3 dagi birinchi barqaror relizidan beri kompilyator eksperimental backend dan sanoat loyihalarida ishlatiladigan production-ready vositaga qadar rivojlandi.

Kotlin/JS ning asosiy maqsadi — JavaScript yoki TypeScript o'rniga Kotlin yordamida frontend ishlab chiqishdir. Dasturchilar Kotlin tilining barcha imkoniyatlarini oladilar: null safety, kengaytma funksiyalari, data sinflari, korutinlar va sealed sinflar. Yaratilgan JavaScript kodi har qanday zamonaviy brauzerda yoki Node.js muhitida bajarilishi mumkin. Kotlin/JS ayniqsa Kotlin Multiplatform loyihalarida talab qilinadi, bunda umumiy modul (commonMain) mobil va veb-ilovalar uchun ham mavjud.

Kotlin/JS ekotizimiga foydalanuvchi interfeyslarini yaratish uchun freymvorklar kiradi. Veb uchun Compose Multiplatform Kotlin/JS ni maqsadli backend sifatida ishlatadi, bu brauzerda ishlaydigan deklarativ UI komponentlarini yaratish imkonini beradi. Muqobil yechimlarga React uchun Kotlin Wrappers kiradi, ular React, React Router va Redux uchun type-safe API ta'minlaydi.

Kotlin/JS kompilyatori qanday ishlaydi

Kompilyatsiya Kotlin/JS bir necha transformatsiya bosqichlaridan o'tadi. Manba Kotlin kodi avval oraliq tasvirga (IR) kompilyatsiya qilinadi, so'ngra optimallashtiriladi va JavaScript kodi yaratiladi. Kotlin 1.8 dan boshlab, eski backend (AST asosidagi JsBackend) to'liq IR-backend bilan almashtirildi, bu yaxshiroq optimallashtirish, kichikroq chiqish kodi hajmi va TypeScript muvofiqligini ta'minlaydi.

Ilgari Kotlin/JS JsBackend dan foydalangan, u to'g'ridan-to'g'ri AST daraxti (Abstract Syntax Tree) bilan ishlagan. Bu yondashuv cheklovlarga ega edi: platforma optimallashtirishlarini qo'llab-quvvatlash murakkabligi, barcha backendlar uchun yagona IR ning yo'qligi va TypeScript deklaratsiyalarini yaratish imkoniyatining yo'qligi. IR-backend ga o'tish bu muammolarni hal qildi, Kotlin ning uchala backendining kompilyatsiyasini birlashtirdi va o'zaro backend optimallashtirishlariga yo'l ochdi.

Kotlin/JS kompilyatsiya rejimlari

Kotlin/JS chiqish kodining formatini va optimallashtirilishini belgilaydigan ikkita kompilyatsiya rejimini qo'llab-quvvatlaydi. Production rejimi kompilyatsiya, minifikatsiya va tree-shaking uchun Webpack dan foydalanadi. Development rejimi tezkor ishlab chiqish iteratsiyasi uchun Hot Module Replacement ni qo'llab-quvvatlaydi. Rejim tanlovi build.gradle.kts da js.target konfiguratsiyasi orqali sozlanadi.

kotlin
kotlin {
    js {
        browser {
            webpackTask {
                outputFileName = "app.js"
            }
        }
        binaries.executable()
    }
}

NPM va JavaScript kutubxonalari bilan integratsiya

Integratsiya Kotlin/JS ning NPM ekotizimi bilan bog'lanishi build.gradle.kts da maxsus DSL orqali amalga oshiriladi. Dasturchi kotlin konfiguratsiyasida npm bog'liqliklarini, paket nomi va versiyasini ko'rsatib e'lon qiladi. Kotlin/JS avtomatik ravishda npm yoki yarn paket menejeri orqali paketlarni yuklab oladi. JavaScript kutubxonalariga type-safe kirishni ta'minlash uchun external deklaratsiyalardan foydalaniladi, ular kutubxonaning turlari va funksiyalarini Kotlin kompilyatori uchun tavsiflaydi.

External deklaratsiyalar — external kalit so'zi bilan belgilangan Kotlin deklaratsiyalaridir. Ular kompilyatorga funksiya yoki sinfning amalga oshirilishi Kotlin emas, balki JavaScript kodida ekanligini bildiradi. JetBrains Kotlin Wrappers tarkibida mashhur kutubxonalar uchun tayyor o'ramlar to'plamlarini taqdim etadi, ularga React, React Router, Redux, Emotion va MUI kiradi. Tayyor o'ramlari bo'lmagan kutubxonalar uchun dasturchi external deklaratsiyalarni qo'lda yozishi yoki Dukat TypeScript bog'lovchi generatoridan foydalanishi mumkin.

kotlin
kotlin {
    js {
        browser { }
        npm {
            dependency("react", "18.3.1")
            dependency("react-dom", "18.3.1")
            devDependency("webpack", "5.92.0")
        }
    }
}

// JavaScript kutubxonasi uchun tashqi deklaratsiya
@JsModule("date-fns")
external fun formatDistance(
    date: Date, baseDate: Date
): String

TypeScript muvofiqligi bilan ishlash

TypeScript — zamonaviy vebning ajralmas qismi va Kotlin/JS .d.ts fayllarini yaratish orqali u bilan muvofiqligini ta'minlaydi. js.generateTsDeclarations = true parametri o'rnatilganda, kompilyator barcha ochiq Kotlin funksiyalari va sinflari uchun TypeScript deklaratsiyalarini yaratadi. Bu TypeScript loyihalariga Kotlin modullarini to'liq tip qo'llab-quvvatlashi bilan import qilish imkonini beradi. TypeScript deklaratsiyalarini yaratish faqat IR-backend bilan ishlaydi va eski backend dan migratsiyaning asosiy sabablaridan biridir.

Kotlin/JS IR-backend va afzalliklari

IR-backend (Intermediate Representation) — Kotlin ning uchala platformasi uchun yagona backend: JVM, JS va Native. U maqsadli kodni yaratishdan oldin bir necha optimallashtirish bosqichlaridan o'tadigan umumiy oraliq tasvirdan foydalanadi. Kotlin/JS uchun IR-backend Kotlin 1.8.0 dan boshlab majburiy bo'ldi, eskirgan (deprecated) deb belgilangan eski AST-asosidagi backend ni almashtirdi.

IR-backend ning Kotlin/JS uchun afzalliklariga IR darajasida yaxshilangan kod optimallashtirish, o'lik kodni yo'qotish va inline optimallashtirishlar hisobiga bundle hajmining kamayishi, shuningdek TypeScript deklaratsiyalarini qo'llab-quvvatlash kiradi. IR-backend shuningdek JavaScript ga tarjima qilishda inline funksiyalar, reified generic-lar va suspend funksiyalarning to'g'ri ishlanishini ta'minlaydi, bu eski backend da muammoli edi.

XususiyatEski backend (AST)IR-backend
TypeScript deklaratsiyalariQo'llab-quvvatlanmaganAvtomatik yaratiladi
O'lik kodni yo'qotishCheklanganTo'liq, IR darajasida
Inline funksiyalarTo'g'rilik muammolariTo'g'ri ishlash
Reified generic-larQo'llab-quvvatlanmaganQo'llab-quvvatlanadi
Bundle hajmiAsosiy20–30% kichikroq

Kod misollari: sozlash va ishlab chiqish

To'liq Kotlin/JS loyihasi build.gradle.kts konfiguratsiyasi bilan boshlanadi. kotlin multiplatform plagini Kotlin/JS ni maqsadli platformalardan biri sifatida sozlash imkonini beradi. React bilan veb-ilova uchun sozlash misolini ko'rib chiqaylik.

kotlin
plugins {
    kotlin("multiplatform") version "2.0.21"
    id("org.jetbrains.kotlin-wrappers") version "1.0.0-pre.775"
}

kotlin {
    js {
        browser { }
        binaries.executable()
        generateTsDeclarations = true
    }
}

dependencies {
    implementation(enwraps(react, reactDom))
}

Sozlashdan so'ng Kotlin da React komponentlarini yozish mumkin. Kotlin Wrappers React uchun type-safe API ta'minlaydi, jumladan funksional komponentlar, hook-lar va DSL quruvchilari orqali JSX-ga o'xshash sintaksis. Counter komponenti misoli useState va hodisa boshqaruvchilari bilan ishlashni ko'rsatadi.

kotlin
@OptIn(ExperimentalWrapperApi::class)
val Counter = FC<Props> {
    var count = useState(0)

    div {
        +"Counter value: ${count.component1()}"
        button {
            onClick = { count.component2()(count.component1() + 1) }
            +"Increment"
        }
    }
}

fun main() {
    createRoot(document.getElementById("root")!!).render(
        createElement(Counter)
    )
}

Qurish va joylashtirish

Kotlin/JS loyihasini qurish Gradle vazifalari orqali amalga oshiriladi. jsDevelopmentRun ishlab chiqish uchun HMR bilan Webpack dev-server ini ishga tushiradi. jsProductionExecutableCompileSync minifikatsiya va tree-shaking bilan production bundle yaratadi. Kompilyatsiya qilingan JavaScript ni bog'laydigan yakuniy HTML fayli webpack plagini tomonidan yaratiladi va build/dist da joylashadi.

kotlin
// HMR bilan dev serverini ishga tushirish
./gradlew jsDevelopmentRun

// Minifikatsiya bilan production qurish
./gradlew jsProductionExecutableCompileSync

// Natija build/dist/productionExecutable/ da

Kotlin/JS vs TypeScript: taqqoslash

TypeScript — tipli JavaScript sohasida Kotlin/JS ning asosiy raqobatchisidir. Ikkala til ham JavaScript ga kompilyatsiya qilinadi va dinamik JS ustiga statik tiplashni qo'shadi. Biroq Kotlin/JS bir qator afzalliklarni taklif qiladi: sukut bo'yicha null safety, sealed sinflar, korutinlar va Kotlin Multiplatform bilan uzluksiz integratsiya. TypeScript esa kengroq jamiyatga, turlarga ega ko'proq tayyor kutubxonalarga va yetukroq ekotizimga ega.

Kotlin/JS bilan ishlab chiqish unumdorligi, loyihaning boshqa qismlarida Kotlin dan foydalanadigan jamoalar uchun yuqoriroq bo'lishi mumkin, chunki tillar o'rtasida o'tish talab qilinmaydi. TypeScript Kotlin Multiplatform ishlatilmaydigan sof veb loyihalar uchun mashhurroq tanlov bo'lib qolmoqda. Biroq veb uchun Compose Multiplatform ning o'sib borayotgan mashhurligi bilan Kotlin/JS React va Angular ga alternativ sifatida o'z mavqeini mustahkamlamoqda.

XususiyatKotlin/JSTypeScript
Null safetySukut bo'yichastrictNullChecks ixtiyoriy
Sealed sinflarQo'llab-quvvatlanadiUnion turlari orqali
KorutinlarNativeasync/await orqali
KMM integratsiyasiTo'liqYo'q
Jamiyat hajmiKichikKatta
Kutubxonalar uchun tayyor turlarCheklangan (DefinitelyTyped Dukat orqali)DefinitelyTyped (minglab kutubxonalar)

Kotlin/JS va TypeScript o'rtasidagi tanlov loyiha kontekstiga bog'liq. Agar jamoa allaqachon Kotlin Multiplatform dan foydalanayotgan bo'lsa yoki boshlashni rejalashtirayotgan bo'lsa, Kotlin/JS frontend qismi uchun mantiqiy tanlovdir. Izolyatsiya qilingan veb loyihasi uchun TypeScript, JavaScript kutubxonalari uchun tayyor turlarning mavjudligi va bozorda ko'proq dasturchilar borligi sababli pragmatikroq yechim bo'lib qolmoqda.

Ko'p beriladigan savollar

Kotlin/JS ni React bilan ishlatish mumkinmi?

Ha, JetBrains Kotlin Wrappers — React, React Router va Redux uchun type-safe Kotlin o'ramlarini taqdim etadi. Ular hook-lar va JSX-ga o'xshash DSL ni to'liq qo'llab-quvvatlagan holda Kotlin da React komponentlarini yozish imkonini beradi.

Kotlin/JS TypeScript loyihalari bilan qanday ishlaydi?

generateTsDeclarations = true yoqilganda, Kotlin/JS barcha ochiq API lar uchun .d.ts fayllarini yaratadi. TypeScript loyihalari Kotlin modullarini oddiy npm paketlari kabi to'liq tiplash bilan import qilishi mumkin.

Kotlin/JS ilovasining bundle hajmi qancha?

Bundle hajmi ishlatiladigan kutubxonalarga bog'liq. Minimal Hello World ilovasi Kotlin stdlib bilan birga taxminan 300 KB ni tashkil qiladi. React va Kotlin Wrappers bilan hajm 400–600 KB gacha oshadi.

Kotlin/JS Node.js muhitini qo'llab-quvvatlaydimi?

Ha, Kotlin/JS Node.js ostida serverless funksiyalar va konsol vositalarini ishlab chiqish uchun ishlatilishi mumkin. Buning uchun konfiguratsiyada js.browser o'rniga js.nodejs ko'rsatilishi kerak.

Kotlin/JS Kotlin/Wasm dan qanday farq qiladi?

Kotlin/Wasm — WebAssembly uchun eksperimental backend, Kotlin/JS esa JavaScript kodini yaratadi. Wasm yuqoriroq unumdorlikni ta'minlaydi, lekin brauzer DOM iga cheklangan kirishga ega.

Xulosa

  • Kotlin/JS — korutinlar, sealed sinflar va null safety qo'llab-quvvatlashi bilan frontend ishlab chiqish uchun Kotlin dan JavaScript ga kompilyator.
  • IR-backend eski AST-asosidagi backend ni almashtirib, TypeScript deklaratsiyalarini yaratish va bundle ni 20–30% kamaytirishni ta'minladi.
  • NPM integratsiyasi tashqi deklaratsiyalar va Kotlin Wrappers orqali istalgan JavaScript kutubxonalarini ulash imkonini beradi.
  • TypeScript muvofiqligi generateTsDeclarations = true bo'lganda avtomatik .d.ts fayllarini yaratish orqali amalga oshiriladi.
  • KMM integratsiyasi — Kotlin/JS ning TypeScript dan asosiy ustunligi, mobil ilovalar bilan umumiy kodni qayta ishlatish imkonini beradi.
  • Izolyatsiya qilingan veb loyihalar uchun TypeScript jamiyat hajmi va turlarning mavjudligi sababli pragmatikroq tanlov bo'lib qolmoqda.
  • KMM loyihalarining frontend qismi uchun yoki veb uchun Compose Multiplatform bilan ishlab chiqishda Kotlin/JS dan foydalaning.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing