Bundler — bu nədir, hansı növləri var və iş prinsipi

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

Bundler — brauzerdə və ya mobil tətbiqdə istifadə üçün çoxsaylı JavaScript modullarını bir və ya bir neçə faylda birləşdirən qurğu alətidir. Müasir bundlerlər (Webpack, Metro, Vite) faylları yalnız birləşdirmir, həm də transpilasiya, minifikasiya və resurs optimallaşdırması həyata keçirir. Webpack Concepts (2026) məlumatına görə, bundlerin düzgün konfiqurasiyası funksionallığı itirmədən yığma ölçüsünü 40–60% azaldır.

Əsas məqamlar

  • Bundler — JavaScript modullarını və onların asılılıqlarını yerləşdirmə üçün optimallaşdırılmış fayllarda birləşdirən proqram.
  • Webpack — hər hansı yığma tapşırığı üçün zəngin loader və plagin ekosisteminə malik ən populyar bundler.
  • Metro — React Native üçün standart bundler, mobil tətbiq inkişafı üçün optimallaşdırılmışdır.
  • Vite — sürətli inkişaf üçün yerli ES modullarından və istehsal yığması üçün Rollup-dan istifadə edən yeni nəsil bundler.
  • Bundle etmə transpilasiya, minifikasiya, kod bölgüsü və asılılıqların idarə edilməsini əhatə edir.

Bundler nədir?

Bundler (modul yığıcı) — giriş nöqtəsini (entry point) — tətbiqin əsas faylını — qəbul edən və onun bütün asılılıqlarını rekursiv şəkildə gəzərək modul qrafiki quran komanda sətri alətidir. Çıxışda bundler HTML səhifəsinə qoşula və ya mobil tətbiqdə işlədilə bilən bir və ya bir neçə fayl yaradır.

Müasir inkişafda bundler niyə lazımdır

Brauzerlər uzun müddət platforma səviyyəsində JavaScript modul sistemini dəstəkləmirdi. Bundler bu problemi həll edərək yüzlərlə importrequire-i vahid fayla çevirirdi. Bu gün, brauzerlərdə yerli ES modul dəstəyi olsa belə, bundlerlər əlavə tapşırıqlar yerinə yetirir: transpilasiya JSX və TypeScript, minifikasiya kod, code splitting gec yükləmə üçün və hot module replacement (HMR) inkişafı sürətləndirmək üçün.

Mobil tətbiq inkişafında React Native standart bundler kimi Metro-dan istifadə edir, Flutter isə Dart əsaslı öz yığma sistemindən istifadə edir. Bundler seçimi birbaşa inkişaf sürətinə, tətbiq ölçüsünə və iş vaxtı performansına təsir edir.

Bundle necə işləyir?

Bundle etmə bir neçə mərhələdən keçir: giriş fayllarının parsellənməsi, asılılıq qrafikinin qurulması, modulların çevrilməsi və çıxış fayllarının yaradılması. Hər mərhələdə bundler mənbə kodunu çevirmək üçün loader-lər və optimallaşdırma üçün plaginlər tətbiq edir.

Parselləmə mərhələsi və asılılıq qrafiki

Bundler giriş nöqtəsindən başlayır, faylı oxuyur və AST (abstrakt sintaksis ağacı) qurur. AST-dən bütün importrequire operatorları çıxarılır. Tapılan hər import üçün bundler prosesi rekursiv şəkildə təkrarlayır, ta ki bütün asılılıqlar vahid qrafikdə toplanana qədər.

js
// Bundlerin sadələşdirilmiş tətbiqi
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)] };
}

Qrafik qurulduqdan sonra bundler loader-lər tətbiq edir — faylları JavaScript-ə çevirən transformasiyalar: TypeScript → JS, SCSS → CSS, JSX → JSX-funksiyaları. Sonra plaginlər əlavə çevrilmələr həyata keçirir: minifikasiya, şəkillərin inline edilməsi, service worker yaradılması.

Bundlerlərin əsas növləri

Bundlerlər üç nəslə bölünür: klassik, ixtisaslaşdırılmış və ES modulları əsasında yeni nəsil. Hər tip öz arxitekturasına və tətbiq sahəsinə malikdir.

Klassik bundlerlər

Webpack — nəhəng ekosistemə malik ən geniş yayılmış bundler. Onun əsas üstünlüyü çeviklikdir: minlərlə loader və plagin demək olar ki, hər yığma ssenarisini əhatə edir. Parcel fayl uzantıları əsasında lazımi transformasiyaları avtomatik təyin edən zero-config yanaşması təklif edir. Hər iki bundler code splitting və HMR dəstəkləyir.

İxtisaslaşdırılmış bundlerlər

Metro xüsusi olaraq React Native üçün yaradılmışdır və yalnız JavaScript və TypeScript ilə işləyir. Onun arxitekturası mobil inkişaf üçün optimallaşdırılmışdır: inline requires dəstəyi, modulların asinxron yüklənməsi və Hermes engine ilə inteqrasiya. Rollup kitabxanalar və npm paketləri üçün nəzərdə tutulmuşdur, lazımsız bükücü olmadan təmiz ES modul çıxışı yaradır.

Webpack, Metro və Vite müqayisəsi

Bundler seçimi platformadan və layihə tələblərindən asılıdır. Webpack universaldır, lakin ətraflı konfiqurasiya tələb edir. Metro React Native üçün alternativsizdir. Vite yerli ES modulları sayəsində ən sürətli inkişafı təmin edir.

XüsusiyyətWebpackMetroVite
PlatformaVeb, universalReact NativeVeb, universal
Dev yığma sürətiOrtaYüksəkÇox yüksək
Code splittingBəliBəliBəli
HMRBəliFast RefreshAni HMR
Plagin ekosistemiNəhəngMəhdudBöyüyən
KonfiqurasiyaMürəkkəbSadəSadə
TypeScript dəstəyiLoader-lər vasitəsiləDaxiliDaxili

Vite asılılıqların ilkin bundle edilməsi üçün esbuild-dan və istehsal yığması üçün Rollup-dan istifadə edir ki, bu da inkişaf rejimində Webpack ilə müqayisədə 5–10 dəfə sürət artımı verir. Metro veb hədəfləri dəstəkləmir, lakin React Native bridge və Turbo Modules ilə problemsiz inteqrasiya təmin edir.

Layihədə bundlerin konfiqurasiyası

Konfiqurasiya bundlerin müxtəlif fayl növlərinin necə işlənəcəyini, yığmanın harada yaradılacağını və hansı optimallaşdırmaların tətbiq olunacağını müəyyən edir. Tipik konfiqurasiya faylına giriş nöqtəsi, modul qaydaları, plaginlər və çıxış parametrləri daxildir.

React Native veb layihəsi üçün Webpack konfiqurasiyası nümunəsi

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 konfiqurasiya üçün ayrıca metro.config.jsbabel.config.js fayllarından istifadə edir. Webpack-dən fərqli olaraq, Metro konfiqurasiyası xeyli sadədir, çünki bundler React Native üçün ixtisaslaşdırılmışdır və stillər və ya şəkillər üçün loader konfiqurasiyası tələb etmir.

Yığma zamanı tipik səhvlər

Hətta təcrübəli proqramçılar bundle səhvləri ilə qarşılaşır. Duplicate module — ən çox rast gəlinən problemlərdən biri, eyni asılılıq package.json-da versiya uyğunsuzluğu səbəbindən bundle-a bir neçə dəfə düşdükdə baş verir. Module not found import yolu səhv göstərildikdə və ya paket quraşdırılmadıqda yaranır.

Metro üçün xas səhvlər

Metro mobil cihazlar üçün bundle ölçüləri ilə məhdudlaşır. 2–5 MB həddi aşıldıqda, cihazda yaddaş çatışmazlığı səbəbindən Unable to resolve module xətası yaranır. Həll yolu — modulların gec yüklənməsi üçün inline requiresRAM bundles istifadə edin. Metro həmçinin simlinklərə həssasdır, buna görə monorepozitoriyalar üçün konfiqurasiyada əlavə watchFolders parametri tələb olunur.

Webpack üçün tipik problem — Module parse failed, fayl gözlənilməz formata malik olduqda və ya lazımi loader olmadıqda baş verir. Fayl uzantısını yoxlamaq və module.rules-da müvafiq qayda əlavə etmək problemi həll edir. source-map-explorer istifadə etmək son bundle-da təkrarlanan modulları və artıq asılılıqları tapmağa kömək edir.

Yığmanı sürətləndirmək üçün konfiqurasiya optimallaşdırması

Yavaş yığma — bundlerlərlə işləyərkən əsas problemlərdən biridir. Sürətləndirmək üçün modul transformasiya nəticələrini işə salmalar arasında saxlayan persistent caching istifadə edin. Webpack 5 cache: { type: 'filesystem' } vasitəsilə fayl keşini dəstəkləyir, Vite ilkin bundle üçün esbuild-dan istifadə edir, Metro isə RAM-da modul keşinə əsaslanır. Əlavə olaraq, artıq hazır paketləri təkrar emal etməmək üçün loader-lərdə node_modules üçün exclude təyin edin.

Kod bölgüsü strategiyasının seçilməsi

Code splitting — bundle-ın tələb əsasında yüklənən hissələrə bölünməsi. Müxtəlif bundlerlər bu strategiyanı özünəməxsus şəkildə həyata keçirir. Webpack hər modul üçün ayrıca hissələr yaradan dinamik import import()-u dəstəkləyir. Metro gec yükləmə üçün inline requires istifadə edir. Vite əlavə konfiqurasiya olmadan vendor hissələrini və dinamik importları avtomatik bölür. Strategiya seçimi layihə tələblərindən asılıdır: mobil tətbiqlər üçün gec yükləmə ilə daha kiçik ilkin bundle-lar üstünlük təşkil edir.

Code splitting-in React Native-də düzgün işləməsi üçün əlavə konfiqurasiya tələb olunur: Metro inlineRequires vasitəsilə asinxron hissələrlə işləmək üçün konfiqurasiya edilməlidir. Webpack və Vite-də code splitting dinamik import() sintaksisindən istifadə edərək qutudan çıxan kimi işləyir, avtomatik olaraq bölmə nöqtələri yaradır. Maksimum effektivlik üçün code splitting-i kritik hissələr üçün <link rel="preload"> vasitəsilə preload ipuçları ilə birləşdirin.

Tez-tez verilən suallar

Müasir tətbiq üçün bundler istifadə etmək məcburidirmi?

JSX, TypeScript və ya CSS modulları olmayan sadə layihələr üçün brauzerdə yerli ES modulları ilə kifayətlənmək olar. Lakin istehsal yığması üçün bundler performans üçün kritik olan minifikasiya, tree shaking və code splitting təmin edir. Bundler olmadan böyük layihələrdə modul arxitekturasını qorumaq çətindir.

Yeni layihə üçün hansı bundler seçilməlidir?

React Native üçün — Metro (yeganə dəstəklənən variant). Veb tətbiqlər üçün — yeni layihələr üçün Vite (sürətinə görə) və ya mövcud layihələr üçün zəngin ekosistemə malik Webpack. Kitabxanalar və npm paketləri üçün — Rollup, çünki təmiz ES modul çıxışı yaradır.

Bundler mobil tətbiqin ölçüsünə necə təsir edir?

Bundler birbaşa son JS bundle-nın ölçüsünü müəyyən edir. Webpack tree shaking ilə ölçüsü 30–50% azalda bilər. React Native üçün Metro adi JavaScript ilə müqayisədə ölçüsü 20–30% azaldan Hermes bytecode-nu dəstəkləyir. Code splitting modulları tələb əsasında yükləməyə imkan verir, ilkin bundle-ı azaldır.

Veb və mobil platformalar üçün bundle etmə nə ilə fərqlənir?

Veb üçün bundler müxtəlif brauzerlərlə uyğun kod yaradır və CSS, şəkillər və şriftləri dəstəkləyir. Mobil platformalar üçün Metro JavaScript mühərriki (Hermes və ya JSC) üçün kod yaradır, CSS və ya HTML emal etmir və yığmanı cihazın məhdud resurslarına uyğun optimallaşdırır.

Bir layihədə bir neçə bundler istifadə etmək olarmı?

Bəli, veb hissə üçün Webpack və React Native üçün Metro istifadə edən layihələr mövcuddur — məsələn, ümumi kod bazası olan monolit repozitoriyalarda. Lakin bu, CI/CD konfiqurasiyasını çətinləşdirir və asılılıq versiyalarının sinxronlaşdırılmasını tələb edir. Mümkünsə, bütün hədəflər üçün vahid bundler istifadə etmək tövsiyə olunur.

Nəticə

  • Bundler — JavaScript modullarını brauzer və ya mobil tətbiq üçün optimallaşdırılmış fayllarda birləşdirən alət.
  • Webpack — ən böyük loader və plagin ekosisteminə malik universal bundler.
  • Metro — React Native üçün standart bundler, mobil inkişaf üçün optimallaşdırılmışdır.
  • Vite — yerli ES modulları və Webpack-dən 5–10 dəfə yüksək dev-server sürətinə malik yeni nəsil bundler.
  • Bundle etmə parselləmə, asılılıq qrafikinin qurulması, transpilasiya və çıxış fayllarının yaradılmasını əhatə edir.
  • Tree shakingcode splitting — son bundle ölçüsünü azaldan əsas optimallaşdırmalar.
  • React Native üçün Metro alternativsizdir, veb layihələri üçün tələblərdən asılı olaraq Vite və ya Webpack seçin.

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