Bundler — यह क्या है, कितने प्रकार के होते हैं और कार्य सिद्धांत

लेखक: IT Sectr प्रकाशित: 2026-05-19 पढ़ने का समय: 8 मिनट

Bundler एक बिल्ड टूल है जो कई JavaScript मॉड्यूल को एक या कई फ़ाइलों में जोड़ता है ताकि उन्हें ब्राउज़र या मोबाइल एप्लिकेशन में उपयोग किया जा सके। आधुनिक बंडलर (Webpack, Metro, Vite) न केवल फ़ाइलों को जोड़ते हैं बल्कि ट्रांसपाइलेशन, मिनिफिकेशन और रिसोर्स ऑप्टिमाइज़ेशन भी करते हैं। Webpack Concepts (2026) के अनुसार, बंडलर का सही कॉन्फ़िगरेशन कार्यक्षमता खोए बिना बिल्ड आकार को 40–60% तक कम करता है।

मुख्य बिंदु

  • Bundler एक प्रोग्राम है जो JavaScript मॉड्यूल और उनकी निर्भरताओं को डिप्लॉयमेंट के लिए ऑप्टिमाइज़्ड फ़ाइलों में जोड़ता है।
  • Webpack सबसे लोकप्रिय बंडलर है जिसमें किसी भी बिल्ड कार्य के लिए लोडर और प्लगइन्स का समृद्ध पारिस्थितिकी तंत्र है।
  • Metro React Native के लिए डिफ़ॉल्ट बंडलर है, जो मोबाइल एप्लिकेशन डेवलपमेंट के लिए ऑप्टिमाइज़्ड है।
  • Vite नई पीढ़ी का बंडलर है जो तेज़ डेवलपमेंट के लिए नेटिव ES मॉड्यूल और प्रोडक्शन बिल्ड के लिए Rollup का उपयोग करता है।
  • बंडलिंग में ट्रांसपाइलेशन, मिनिफिकेशन, कोड स्प्लिटिंग और निर्भरता प्रबंधन शामिल है।

Bundler क्या है?

Bundler (मॉड्यूल बंडलर) एक कमांड-लाइन टूल है जो एंट्री पॉइंट — एप्लिकेशन की मुख्य फ़ाइल — लेता है और मॉड्यूल ग्राफ़ बनाते हुए इसकी सभी निर्भरताओं को रिकर्सिवली ट्रैवर्स करता है। आउटपुट पर, बंडलर एक या अधिक फ़ाइलें जनरेट करता है जिन्हें HTML पेज में शामिल किया जा सकता है या मोबाइल एप्लिकेशन में चलाया जा सकता है।

आधुनिक डेवलपमेंट में बंडलर की आवश्यकता क्यों है

लंबे समय तक ब्राउज़र प्लेटफ़ॉर्म स्तर पर JavaScript मॉड्यूल सिस्टम का समर्थन नहीं करते थे। Bundler ने सैकड़ों import और require को एक फ़ाइल में बदलकर इस समस्या को हल किया। आज, ब्राउज़रों में ES मॉड्यूल के नेटिव समर्थन के बावजूद, बंडलर अतिरिक्त कार्य करते हैं: JSX और TypeScript का ट्रांसपाइलेशन, कोड मिनिफिकेशन, लेज़ी लोडिंग के लिए कोड स्प्लिटिंग और डेवलपमेंट तेज़ करने के लिए हॉट मॉड्यूल रिप्लेसमेंट (HMR)।

मोबाइल डेवलपमेंट में, React Native अपने डिफ़ॉल्ट बंडलर के रूप में Metro का उपयोग करता है, जबकि Flutter Dart-आधारित अपनी स्वयं की बिल्ड प्रणाली का उपयोग करता है। बंडलर का चुनाव डेवलपमेंट स्पीड, एप्लिकेशन आकार और रनटाइम प्रदर्शन को सीधे प्रभावित करता है।

बंडलिंग कैसे काम करती है?

बंडलिंग कई चरणों से गुज़रती है: इनपुट फ़ाइलों का पार्सिंग, निर्भरता ग्राफ़ का निर्माण, मॉड्यूल का रूपांतरण और आउटपुट फ़ाइलों का जनरेशन। प्रत्येक चरण में, बंडलर स्रोत कोड को रूपांतरित करने के लिए लोडर और ऑप्टिमाइज़ेशन के लिए प्लगइन लागू करता है।

पार्सिंग और निर्भरता ग्राफ़ चरण

बंडलर एंट्री पॉइंट से शुरू होता है, फ़ाइल को पढ़ता है और एक AST (एब्सट्रैक्ट सिंटैक्स ट्री) बनाता है। AST से सभी import और require स्टेटमेंट निकाले जाते हैं। प्रत्येक मिले इम्पोर्ट के लिए, बंडलर प्रक्रिया को रिकर्सिवली दोहराता है जब तक कि सभी निर्भरताएँ एक ग्राफ़ में एकत्र न हो जाएँ।

js
// बंडलर का सरलीकृत कार्यान्वयन
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)] };
}

ग्राफ़ बनाने के बाद, बंडलर लोडर लागू करता है — रूपांतरण जो फ़ाइलों को JavaScript में बदलते हैं: TypeScript → JS, SCSS → CSS, JSX → JSX फ़ंक्शन। फिर प्लगइन अतिरिक्त रूपांतरण करते हैं: मिनिफिकेशन, इमेज इनलाइनिंग, सर्विस वर्कर जनरेशन।

बंडलर के मुख्य प्रकार

बंडलर तीन पीढ़ियों में विभाजित हैं: क्लासिक, विशेषीकृत और ES मॉड्यूल-आधारित नई पीढ़ी। प्रत्येक प्रकार की अपनी वास्तुकला और उपयोग का क्षेत्र होता है।

क्लासिक बंडलर

Webpack सबसे व्यापक बंडलर है जिसमें विशाल पारिस्थितिकी तंत्र है। इसका मुख्य लाभ लचीलापन है: हज़ारों लोडर और प्लगइन लगभग किसी भी बिल्ड परिदृश्य को कवर करते हैं। Parcel ज़ीरो-कॉन्फ़िग दृष्टिकोण प्रदान करता है, जो फ़ाइल एक्सटेंशन के आधार पर आवश्यक रूपांतरणों को स्वचालित रूप से पहचानता है। दोनों बंडलर कोड स्प्लिटिंग और HMR का समर्थन करते हैं।

विशेषीकृत बंडलर

Metro विशेष रूप से React Native के लिए बनाया गया है और केवल JavaScript और TypeScript के साथ काम करता है। इसकी वास्तुकला मोबाइल डेवलपमेंट के लिए ऑप्टिमाइज़्ड है: इनलाइन requires, मॉड्यूल की एसिंक्रोनस लोडिंग और Hermes इंजन के साथ एकीकरण। Rollup लाइब्रेरी और npm पैकेज के लिए लक्षित है, जो बिना अनावश्यक रैपर के स्वच्छ ES मॉड्यूल आउटपुट जनरेट करता है।

Webpack, Metro और Vite की तुलना

बंडलर का चुनाव प्लेटफ़ॉर्म और प्रोजेक्ट की आवश्यकताओं पर निर्भर करता है। Webpack बहुमुखी है लेकिन इसके लिए विस्तृत कॉन्फ़िगरेशन की आवश्यकता होती है। Metro React Native के लिए एकमात्र विकल्प है। Vite नेटिव ES मॉड्यूल के कारण सबसे तेज़ डेवलपमेंट अनुभव प्रदान करता है।

विशेषताWebpackMetroVite
प्लेटफ़ॉर्मवेब, सार्वभौमिकReact Nativeवेब, सार्वभौमिक
डेव बिल्ड गतिमध्यमउच्चबहुत उच्च
कोड स्प्लिटिंगहाँहाँहाँ
HMRहाँFast Refreshतत्काल HMR
प्लगइन पारिस्थितिकी तंत्रविशालसीमितबढ़ता हुआ
कॉन्फ़िगरेशनजटिलसरलसरल
TypeScript समर्थनलोडर के माध्यम सेअंतर्निर्मितअंतर्निर्मित

Vite निर्भरताओं के प्री-बंडलिंग के लिए esbuild और प्रोडक्शन बिल्ड के लिए Rollup का उपयोग करता है, जो डेवलपमेंट मोड में Webpack की तुलना में 5–10 गुना गति सुधार प्रदान करता है। Metro वेब लक्ष्यों का समर्थन नहीं करता लेकिन React Native ब्रिज और Turbo Modules के साथ सहज एकीकरण प्रदान करता है।

प्रोजेक्ट में बंडलर कॉन्फ़िगरेशन

कॉन्फ़िगरेशन यह निर्धारित करता है कि विभिन्न फ़ाइल प्रकारों को कैसे संसाधित किया जाता है, बिल्ड कहाँ जनरेट होता है और कौन से ऑप्टिमाइज़ेशन लागू होते हैं। एक सामान्य कॉन्फ़िगरेशन फ़ाइल में एंट्री पॉइंट, मॉड्यूल नियम, प्लगइन और आउटपुट सेटिंग्स शामिल होती हैं।

React Native वेब प्रोजेक्ट के लिए Webpack कॉन्फ़िगरेशन उदाहरण

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 कॉन्फ़िगरेशन के लिए अलग फ़ाइलों metro.config.js और babel.config.js का उपयोग करता है। Webpack के विपरीत, Metro का कॉन्फ़िगरेशन काफ़ी सरल है क्योंकि बंडलर React Native के लिए विशेषीकृत है और स्टाइल या इमेज के लिए लोडर कॉन्फ़िगर करने की आवश्यकता नहीं होती।

सामान्य बिल्ड त्रुटियाँ

अनुभवी डेवलपर्स भी बंडलिंग त्रुटियों का सामना करते हैं। Duplicate module सबसे आम समस्याओं में से एक है, जब package.json में संस्करण असंगतता के कारण एक ही निर्भरता कई बार बंडल में आती है। Module not found तब होता है जब import पथ गलत हो या पैकेज स्थापित न हो।

Metro-विशिष्ट त्रुटियाँ

Metro मोबाइल उपकरणों के लिए बंडल आकारों द्वारा सीमित है। जब 2–5 MB की सीमा पार हो जाती है, तो डिवाइस पर मेमोरी अपर्याप्तता के कारण Unable to resolve module त्रुटि होती है। समाधान — मॉड्यूल की लेज़ी लोडिंग के लिए inline requires और RAM bundles का उपयोग करना है। Metro सिमलिंक के प्रति भी संवेदनशील है, इसलिए मोनोरेपो में कॉन्फ़िगरेशन में अतिरिक्त watchFolders सेटिंग की आवश्यकता होती है।

Webpack के लिए एक सामान्य समस्या Module parse failed है, जो तब होती है जब फ़ाइल का अप्रत्याशित प्रारूप होता है या आवश्यक लोडर गायब होता है। फ़ाइल एक्सटेंशन की जाँच करना और module.rules में उपयुक्त नियम जोड़ना समस्या हल करता है। source-map-explorer का उपयोग अंतिम बंडल में डुप्लिकेट मॉड्यूल और अतिरिक्त निर्भरताएँ खोजने में मदद करता है।

बिल्ड तेज़ करने के लिए कॉन्फ़िगरेशन ऑप्टिमाइज़ेशन

धीमी बिल्ड बंडलर के साथ काम करते समय मुख्य समस्याओं में से एक है। तेज़ी लाने के लिए persistent caching का उपयोग करें, जो रनों के बीच मॉड्यूल ट्रांसफ़ॉर्मेशन परिणामों को सहेजता है। Webpack 5 cache: { type: 'filesystem' } के माध्यम से फ़ाइल कैश का समर्थन करता है, Vite प्री-बंडलिंग के लिए esbuild का उपयोग करता है, और Metro मेमोरी मॉड्यूल कैश पर निर्भर करता है। अतिरिक्त रूप से, लोडर में node_modules के लिए exclude निर्दिष्ट करें ताकि पहले से तैयार पैकेजों को फिर से प्रोसेस न करना पड़े।

कोड स्प्लिटिंग रणनीति का चयन

कोड स्प्लिटिंग बंडल को चंक्स में विभाजित करता है जो माँग पर लोड होते हैं। विभिन्न बंडलर इस रणनीति को अलग-अलग तरीके से लागू करते हैं। Webpack डायनामिक इम्पोर्ट import() का समर्थन करता है, जो प्रत्येक मॉड्यूल के लिए अलग चंक बनाता है। Metro विलंबित लोडिंग के लिए inline requires का उपयोग करता है। Vite बिना अतिरिक्त कॉन्फ़िगरेशन के स्वचालित रूप से वेंडर चंक और डायनामिक इम्पोर्ट को विभाजित करता है। रणनीति का चुनाव प्रोजेक्ट की आवश्यकताओं पर निर्भर करता है: मोबाइल एप्लिकेशन के लिए लेज़ी लोडिंग के साथ छोटे प्रारंभिक बंडल पसंद किए जाते हैं।

React Native में code splitting के सही काम करने के लिए अतिरिक्त कॉन्फ़िगरेशन आवश्यक है: Metro को inlineRequires के माध्यम से एसिंक्रोनस चंक के लिए कॉन्फ़िगर किया जाना चाहिए। Webpack और Vite में, डायनामिक import() सिंटैक्स का उपयोग करने पर कोड स्प्लिटिंग डिफ़ॉल्ट रूप से काम करता है, जो स्वचालित रूप से विभाजन बिंदु बनाता है। अधिकतम दक्षता के लिए, महत्वपूर्ण चंक के लिए <link rel="preload"> के माध्यम से कोड स्प्लिटिंग को प्रीलोड संकेतों के साथ जोड़ें।

अक्सर पूछे जाने वाले प्रश्न

क्या आधुनिक एप्लिकेशन के लिए बंडलर का उपयोग अनिवार्य है?

JSX, TypeScript या CSS मॉड्यूल के बिना सरल प्रोजेक्ट के लिए, आप ब्राउज़र में नेटिव ES मॉड्यूल का उपयोग कर सकते हैं। हालाँकि, प्रोडक्शन बिल्ड के लिए, बंडलर मिनिफिकेशन, ट्री शेकिंग और कोड स्प्लिटिंग प्रदान करता है जो प्रदर्शन के लिए महत्वपूर्ण हैं। बंडलर के बिना बड़े प्रोजेक्ट में मॉड्यूलर आर्किटेक्चर बनाए रखना मुश्किल है।

नए प्रोजेक्ट के लिए कौन सा बंडलर चुनें?

React Native के लिए — Metro (एकमात्र समर्थित विकल्प)। वेब एप्लिकेशन के लिए — नए प्रोजेक्ट के लिए Vite (गति के कारण) या मौजूदा प्रोजेक्ट के लिए Webpack (समृद्ध पारिस्थितिकी तंत्र के साथ)। लाइब्रेरी और npm पैकेज के लिए — Rollup, क्योंकि यह स्वच्छ ES मॉड्यूल आउटपुट जनरेट करता है।

बंडलर मोबाइल एप्लिकेशन के आकार को कैसे प्रभावित करता है?

बंडलर सीधे अंतिम JS बंडल का आकार निर्धारित करता है। ट्री शेकिंग के साथ Webpack आकार को 30–50% तक कम कर सकता है। React Native के लिए Metro Hermes बाइटकोड का समर्थन करता है, जो सामान्य JavaScript की तुलना में आकार को 20–30% कम करता है। कोड स्प्लिटिंग माँग पर मॉड्यूल लोड करने की अनुमति देता है, जिससे प्रारंभिक बंडल कम होता है।

वेब और मोबाइल प्लेटफ़ॉर्म के लिए बंडलिंग कैसे भिन्न है?

वेब के लिए, बंडलर विभिन्न ब्राउज़रों के साथ संगत कोड जनरेट करता है और CSS, इमेज और फ़ॉन्ट का समर्थन करता है। मोबाइल प्लेटफ़ॉर्म के लिए, Metro JavaScript इंजन (Hermes या JSC) के लिए कोड जनरेट करता है, CSS या HTML प्रोसेस नहीं करता और डिवाइस के सीमित संसाधनों के लिए बिल्ड को ऑप्टिमाइज़ करता है।

क्या एक प्रोजेक्ट में कई बंडलर का उपयोग किया जा सकता है?

हाँ, कुछ प्रोजेक्ट वेब भाग के लिए Webpack और React Native के लिए Metro का उपयोग करते हैं — उदाहरण के लिए, साझा कोडबेस वाले मोनोरेपो में। हालाँकि, यह CI/CD कॉन्फ़िगरेशन को जटिल बनाता है और निर्भरता संस्करणों के सिंक्रनाइज़ेशन की आवश्यकता होती है। यदि संभव हो तो सभी लक्ष्यों के लिए एक एकल बंडलर का उपयोग करने की अनुशंसा की जाती है।

सारांश

  • Bundler एक उपकरण है जो JavaScript मॉड्यूल को ब्राउज़र या मोबाइल एप्लिकेशन के लिए ऑप्टिमाइज़्ड फ़ाइलों में जोड़ता है।
  • Webpack सबसे बड़े लोडर और प्लगइन पारिस्थितिकी तंत्र वाला सार्वभौमिक बंडलर है।
  • Metro React Native का मानक बंडलर है, जो मोबाइल डेवलपमेंट के लिए ऑप्टिमाइज़्ड है।
  • Vite नेटिव ES मॉड्यूल और Webpack से 5–10 गुना तेज़ डेव सर्वर वाला नई पीढ़ी का बंडलर है।
  • बंडलिंग में पार्सिंग, निर्भरता ग्राफ़ निर्माण, ट्रांसपाइलेशन और आउटपुट फ़ाइल जनरेशन शामिल है।
  • ट्री शेकिंग और कोड स्प्लिटिंग मुख्य ऑप्टिमाइज़ेशन हैं जो अंतिम बंडल आकार कम करते हैं।
  • React Native के लिए Metro एकमात्र विकल्प है, वेब प्रोजेक्ट के लिए आवश्यकताओं के अनुसार Vite या Webpack चुनें।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें