Bundler — bu nima, qanday turlari bor va ishlash prinsipi

Muallif: IT Sectr Nashr etilgan: 2026-05-19 O'qish vaqti: 8 daq

Bundler — brauzer yoki mobil ilovada foydalanish uchun ko'plab JavaScript modullarini bir yoki bir nechta faylga birlashtiruvchi qurish vositasi. Zamonaviy bundlerlar (Webpack, Metro, Vite) nafaqat fayllarni birlashtiradi, balki transpilatsiya, minifikatsiya va resurs optimallashtirishni ham amalga oshiradi. Webpack Concepts (2026) ma'lumotlariga ko'ra, bundlerni to'g'ri sozlash funksionallikni yo'qotmasdan yig'ma hajmini 40–60% ga kamaytiradi.

Asosiy fikrlar

  • Bundler — JavaScript modullari va ularning bog'liqliklarini joylashtirish uchun optimallashtirilgan fayllarga birlashtiruvchi dastur.
  • Webpack — har qanday yig'ish vazifasi uchun boy loader va plagin ekotizimiga ega eng mashhur bundler.
  • Metro — React Native uchun standart bundler, mobil ilova ishlab chiqish uchun optimallashtirilgan.
  • Vite — tezkor ishlab chiqish uchun mahalliy ES modullaridan va ishlab chiqarish yig'masi uchun Rollup-dan foydalanadigan yangi avlod bundleri.
  • Boglash transpilatsiya, minifikatsiya, kod bo'linishi va bog'liqliklarni boshqarishni o'z ichiga oladi.

Bundler nima?

Bundler (modul yig'uvchi) — kirish nuqtasini (entry point) — ilovaning asosiy faylini — qabul qiladigan va uning barcha bog'liqliklarini rekursiv ravishda aylanib, modul grafigini quradigan buyruq qatori vositasidir. Chiqishda bundler HTML sahifasiga ulanishi yoki mobil ilovada ishga tushirilishi mumkin bo'lgan bir yoki bir nechta faylni yaratadi.

Zamonaviy ishlab chiqishda bundler nima uchun kerak

Brauzerlar uzoq vaqt davomida platforma darajasida JavaScript modul tizimini qo'llab-quvvatlamadi. Bundler bu muammoni hal qilib, yuzlab import va require-ni bitta faylga aylantirdi. Bugungi kunda, brauzerlarda mahalliy ES modullari qo'llab-quvvatlansa ham, bundlerlar qo'shimcha vazifalarni bajaradi: transpilatsiya JSX va TypeScript, minifikatsiya kod, code splitting kechiktirilgan yuklash uchun va hot module replacement (HMR) ishlab chiqishni tezlashtirish uchun.

Mobil ilova ishlab chiqishda React Native standart bundler sifatida Metro-dan foydalanadi, Flutter esa Dart-ga asoslangan o'z qurish tizimidan foydalanadi. Bundler tanlovi to'g'ridan-to'g'ri ishlab chiqish tezligiga, ilova hajmiga va ish vaqti unumdorligiga ta'sir qiladi.

Boglash qanday ishlaydi?

Boglash bir necha bosqichdan o'tadi: kirish fayllarini tahlil qilish, bog'liqlik grafigini qurish, modullarni o'zgartirish va chiqish fayllarini yaratish. Har bir bosqichda bundler manba kodini o'zgartirish uchun loaderlar va optimallashtirish uchun plaginlarni qo'llaydi.

Tahlil qilish bosqichi va bog'liqlik grafigi

Bundler kirish nuqtasidan boshlaydi, faylni o'qiydi va AST (mavhum sintaksis daraxti) quradi. AST-dan barcha import va require operatorlari chiqariladi. Har bir topilgan import uchun bundler jarayonni rekursiv ravishda takrorlaydi, barcha bog'liqliklar bitta grafikda to'planmaguncha.

js
// Bundlerni soddalashtirilgan tatbiqi
const fs = require('fs');
const path = require('path');

function buildGraph(entry) {
  const content = fs.readFileSync(entry, 'utf-8');
  const imports = content.match(/require\(['"](.+?)['"]\)/g);
  const modulePath = path.resolve(path.dirname(entry), imports[0]);
  return { entry, content, deps: [buildGraph(modulePath)] };
}

Grafik qurilgandan so'ng, bundler loaderlarni qo'llaydi — fayllarni JavaScript-ga aylantiruvchi transformatsiyalar: TypeScript → JS, SCSS → CSS, JSX → JSX funksiyalari. Keyin plaginlar qo'shimcha o'zgartirishlarni amalga oshiradi: minifikatsiya, rasmlarni inline qilish, service worker yaratish.

Bundlerlarning asosiy turlari

Bundlerlar uch avlodga bo'linadi: klassik, ixtisoslashtirilgan va ES modullariga asoslangan yangi avlod. Har bir tur o'z arxitekturasiga va qo'llanish sohasiga ega.

Klassik bundlerlar

Webpack — ulkan ekotizimga ega eng keng tarqalgan bundler. Uning asosiy afzalligi moslashuvchanlik: minglab loader va plaginlar deyarli har qanday yig'ish stsenariysini qamrab oladi. Parcel fayl kengaytmalari asosida kerakli transformatsiyalarni avtomatik aniqlaydigan zero-config yondashuvini taklif qiladi. Ikkala bundler ham code splitting va HMR-ni qo'llab-quvvatlaydi.

Ixtisoslashtirilgan bundlerlar

Metro maxsus React Native uchun yaratilgan va faqat JavaScript va TypeScript bilan ishlaydi. Uning arxitekturasi mobil ishlab chiqish uchun optimallashtirilgan: inline requires qo'llab-quvvatlashi, modullarni asinxron yuklash va Hermes engine bilan integratsiya. Rollup kutubxonalar va npm paketlariga mo'ljallangan bo'lib, keraksiz o'ramlarsiz toza ES modul chiqishini yaratadi.

Webpack, Metro va Vite solishtirish

Bundler tanlovi platforma va loyiha talablariga bog'liq. Webpack universaldir, ammo batafsil sozlashni talab qiladi. Metro React Native uchun muqobilsizdir. Vite mahalliy ES modullari tufayli eng tez ishlab chiqishni ta'minlaydi.

XususiyatWebpackMetroVite
PlatformaVeb, universalReact NativeVeb, universal
Dev yig'ish tezligiO'rtaYuqoriJuda yuqori
Code splittingHaHaHa
HMRHaFast RefreshBir zumda HMR
Plagin ekotizimiUllkanCheklanganO'sib borayotgan
KonfiguratsiyaMurakkabOddiyOddiy
TypeScript qo'llab-quvvatlashiLoaderlar orqaliIchkiIchki

Vite bog'liqliklarni oldindan boglash uchun esbuild-dan va ishlab chiqarish yig'masi uchun Rollup-dan foydalanadi, bu ishlab chiqish rejimida Webpack bilan solishtirganda 5–10 marta tezlikni oshiradi. Metro veb maqsadlarni qo'llab-quvvatlamaydi, ammo React Native bridge va Turbo Modules bilan muammosiz integratsiyani ta'minlaydi.

Loyihada bundlerni sozlash

Konfiguratsiya bundlerning turli fayl turlarini qanday qayta ishlashini, yig'ma qayerda yaratilishini va qanday optimallashtirishlar qo'llanilishini belgilaydi. Oddiy konfiguratsiya fayli kirish nuqtasi, modul qoidalari, plaginlar va chiqish sozlamalarini o'z ichiga oladi.

React Native veb loyihasi uchun Webpack konfiguratsiyasi namunasi

js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].[contenthash].js',
    clean: true,
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx|ts|tsx)$/,
        exclude: /node_modules/,
        use: { loader: 'babel-loader', options: { presets: ['@babel/preset-react'] } },
      },
      { test: /\.css$/, use: ['style-loader', 'css-loader'] },
    ],
  },
  plugins: [new HtmlWebpackPlugin({ template: './public/index.html' })],
  devServer: { port: 3000, hot: true },
};

Metro sozlash uchun alohida metro.config.js va babel.config.js fayllaridan foydalanadi. Webpack-dan farqli o'laroq, Metro konfiguratsiyasi ancha sodda, chunki bundler React Native uchun ixtisoslashtirilgan va uslublar yoki rasmlar uchun loader sozlashni talab qilmaydi.

Yig'ishdagi odatiy xatolar

Hatto tajribali dasturchilar ham boglash xatolariga duch kelishadi. Duplicate module — eng keng tarqalgan muammolardan biri, bir xil bog'liqlik package.json-da versiya nomuvofiqligi sababli bir necha marta boglashga tushganda yuz beradi. Module not found import yo'li noto'g'ri ko'rsatilganda yoki paket o'rnatilmaganda paydo bo'ladi.

Metro uchun xos xatolar

Metro mobil qurilmalar uchun boglash hajmi bilan cheklangan. 2–5 MB chegaradan oshib ketganda, qurilmada xotira yetishmasligi sababli Unable to resolve module xatosi yuz beradi. Yechim — modullarni kechiktirilgan yuklash uchun inline requires va RAM bundles dan foydalaning. Metro shuningdek simlinklarga sezgir, shuning uchun monorepozitoriyalar uchun konfiguratsiyada qo'shimcha watchFolders sozlanishi talab qilinadi.

Webpack uchun odatiy muammo — Module parse failed, fayl kutilmagan formatga ega bo'lganda yoki kerakli loader yo'q bo'lganda yuz beradi. Fayl kengaytmasini tekshirish va module.rules-da tegishli qoidani qo'shish muammoni hal qiladi. source-map-explorer dan foydalanish yakuniy boglashda takrorlanuvchi modullarni va ortiqcha bog'liqliklarni topishga yordam beradi.

Yig'ishni tezlashtirish uchun konfiguratsiyani optimallashtirish

Sekin yig'ish — bundlerlar bilan ishlashdagi asosiy muammolardan biri. Tezlashtirish uchun modul transformatsiyalari natijalarini ishga tushirishlar orasida saqlaydigan persistent caching dan foydalaning. Webpack 5 cache: { type: 'filesystem' } orqali fayl keshlashni qo'llab-quvvatlaydi, Vite oldindan boglash uchun esbuild-dan foydalanadi, Metro esa RAM-dagi modul keshlashga tayanadi. Qo'shimcha ravishda, tayyor paketlarni qayta ishlamaslik uchun loaderlarda node_modules uchun exclude ni o'rnating.

Kod bo'linishi strategiyasini tanlash

Code splitting — boglashni talab bo'yicha yuklanadigan qismlarga bo'lish. Turli bundlerlar bu strategiyani o'ziga xos tarzda amalga oshiradi. Webpack har bir modul uchun alohida qismlar yaratadigan dinamik import import()-ni qo'llab-quvvatlaydi. Metro kechiktirilgan yuklash uchun inline requires dan foydalanadi. Vite qo'shimcha konfiguratsiyasiz vendor qismlari va dinamik importlarni avtomatik ravishda ajratadi. Strategiya tanlash loyiha talablariga bog'liq: mobil ilovalar uchun kechiktirilgan yuklash bilan kichikroq boshlang'ich boglashlar afzalroqdir.

Code splitting ning React Native-da to'g'ri ishlashi uchun qo'shimcha sozlash talab qilinadi: Metro inlineRequires orqali asinxron qismlar bilan ishlash uchun sozlanishi kerak. Webpack va Vite-da code splitting dinamik import() sintaksisidan foydalanilganda qutidan tashqarida ishlaydi va avtomatik ravishda bo'linish nuqtalarini yaratadi. Maksimal samaradorlik uchun code splitting-ni muhim qismlar uchun <link rel="preload"> orqali preload maslahatlari bilan birlashtiring.

Ko'p beriladigan savollar

Zamonaviy ilova uchun bundler ishlatish majburiymi?

JSX, TypeScript yoki CSS modullari bo'lmagan oddiy loyihalar uchun brauzerda mahalliy ES modullari bilan cheklanish mumkin. Biroq, ishlab chiqarish yig'masi uchun bundler unumdorlik uchun muhim bo'lgan minifikatsiya, tree shaking va code splitting-ni ta'minlaydi. Bundlersiz katta loyihalarda modul arxitekturasini saqlash qiyin.

Yangi loyiha uchun qaysi bundlerni tanlash kerak?

React Native uchun — Metro (yagona qo'llab-quvvatlanadigan variant). Veb ilovalar uchun — yangi loyihalar uchun Vite (tezligi tufayli) yoki mavjud loyihalar uchun boy ekotizimga ega Webpack. Kutubxonalar va npm paketlari uchun — Rollup, chunki u toza ES modul chiqishini yaratadi.

Bundler mobil ilova hajmiga qanday ta'sir qiladi?

Bundler to'g'ridan-to'g'ri yakuniy JS boglash hajmini belgilaydi. Webpack tree shaking bilan hajmni 30–50% ga kamaytirishi mumkin. React Native uchun Metro oddiy JavaScript bilan solishtirganda hajmni 20–30% ga kamaytiradigan Hermes bytecode-ni qo'llab-quvvatlaydi. Code splitting modullarni talab bo'yicha yuklash imkonini beradi, boshlang'ich boglashni kamaytiradi.

Veb va mobil platformalar uchun boglash qanday farq qiladi?

Veb uchun bundler turli brauzerlar bilan mos keladigan kod yaratadi va CSS, rasmlar va shriftlarni qo'llab-quvvatlaydi. Mobil platformalar uchun Metro JavaScript dvigateli (Hermes yoki JSC) uchun kod yaratadi, CSS yoki HTML-ni qayta ishlamaydi va yig'masini qurilmaning cheklangan resurslariga moslashtiradi.

Bir loyihada bir nechta bundler ishlatish mumkinmi?

Ha, veb qismi uchun Webpack va React Native uchun Metro ishlatadigan loyihalar mavjud — masalan, umumiy kod bazasiga ega monolit repozitoriyalarda. Biroq, bu CI/CD konfiguratsiyasini murakkablashtiradi va bog'liqlik versiyalarini sinxronlashtirishni talab qiladi. Iloji bo'lsa, barcha maqsadlar uchun yagona bundlerdan foydalanish tavsiya etiladi.

Xulosa

  • Bundler — JavaScript modullarini brauzer yoki mobil ilova uchun optimallashtirilgan fayllarga birlashtiruvchi vosita.
  • Webpack — eng katta loader va plagin ekotizimiga ega universal bundler.
  • Metro — React Native uchun standart bundler, mobil ishlab chiqish uchun optimallashtirilgan.
  • Vite — mahalliy ES modullari va Webpack-dan 5–10 baravar yuqori dev-server tezligiga ega yangi avlod bundleri.
  • Boglash tahlil qilish, bog'liqlik grafigini qurish, transpilatsiya va chiqish fayllarini yaratishni o'z ichiga oladi.
  • Tree shaking va code splitting — yakuniy boglash hajmini kamaytiradigan asosiy optimallashtirishlar.
  • React Native uchun Metro muqobilsiz, veb loyihalari uchun talablarga qarab Vite yoki Webpack ni tanlang.

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