Webpack একটি শক্তিশালী ওপেন-সোর্স বান্ডলার যা জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন তৈরির জন্য ডি-ফ্যাক্টো স্ট্যান্ডার্ড হয়ে উঠেছে। এটি নির্ভরশীলতা সহ মডিউল নেয় এবং ব্রাউজার বা অন্যান্য রানটাইম পরিবেশের জন্য অপ্টিমাইজ করা স্ট্যাটিক রিসোর্স তৈরি করে। Webpack Documentation (2026) অনুসারে, এই ইকোসিস্টেমে যেকোনো বিল্ড কাজের জন্য ১৫ হাজারেরও বেশি লোডার এবং প্লাগইন রয়েছে।
মূল বিষয়
Webpack একটি মডিউল বান্ডলার যা অ্যাপ্লিকেশনের নির্ভরশীলতা বিশ্লেষণ করে এবং ব্রাউজার বা সার্ভারের জন্য স্ট্যাটিক ফাইলে প্যাকেজ করে। Tobias Koppers 2012 সালে তৈরি করেছেন, Webpack সব ফাইলই মডিউল ধারণার কারণে দ্রুত বিল্ড স্ট্যান্ডার্ড হয়ে ওঠে: জাভাস্ক্রিপ্ট, CSS, ছবি, ফন্ট এবং এমনকি HTML একটি একক লোডার সিস্টেমের মাধ্যমে প্রক্রিয়া করা হয়।
Webpack তার সময়ের জন্য একটি বৈপ্লবিক ধারণা প্রবর্তন করেছে: লোডার আপনাকে import বা require-এর মাধ্যমে যেকোনো রিসোর্স অন্তর্ভুক্ত করতে দেয়। এটি ডেভেলপারদের CSS প্রিপ্রসেসর (SCSS), TypeScript কম্পাইলার এবং ইমেজ অপ্টিমাইজারের জন্য আলাদা টুল ব্যবহার করার প্রয়োজনীয়তা থেকে মুক্ত করেছে। ২০২০ সালের মধ্যে, ৮০% এরও বেশি জাভাস্ক্রিপ্ট প্রকল্পে Webpack ব্যবহৃত হতো (npm stat ডেটা: ২০১৯–২০২৪)।
প্রতিযোগীরা — Vite, Parcel এবং Turbopack — দ্রুত ডেভেলপমেন্ট স্পিড অফার করে, কিন্তু Webpack এন্টারপ্রাইজ সেগমেন্টে স্থিতিশীলতা, পরিপক্ক ইকোসিস্টেম এবং পশ্চাদগামী সামঞ্জস্যের কারণে নেতৃত্ব বজায় রাখে। বড় প্রকল্পে Webpack থেকে Vite-এ মাইগ্রেট করতে সপ্তাহ লাগে এবং প্রায়ই প্লাগইন অসমঞ্জসতার কারণে বাধাগ্রস্ত হয়।
Webpack এন্ট্রি পয়েন্ট থেকে শুরু করে একটি নির্ভরশীলতা গ্রাফ তৈরি করে। প্রতিটি পাওয়া import বা require গ্রাফে যোগ করা হয়, লোডারের চেইনের মধ্য দিয়ে যায় এবং একটি চাঙ্কে রাখা হয়। চূড়ান্ত আউটপুট কনফিগারেশনের উপর নির্ভর করে: একটি বান্ডল, একাধিক চাঙ্ক, অথবা UMD, CommonJS বা ES Module ফরম্যাটে লাইব্রেরি আউটপুট।
// ন্যূনতম Webpack 5 কনফিগারেশন
const path = require('path');
module.exports = {
mode: 'production',
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].[contenthash:8].js',
clean: true,
},
module: {
rules: [
{ test: /\.ts$/, use: 'ts-loader', exclude: /node_modules/ },
],
},
optimization: {
splitChunks: {
chunks: 'all',
cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, filename: 'vendor.[contenthash:8].js' } },
},
},
};
Webpack 5 ফাইল-সিস্টেম-ভিত্তিক বিল্ট-ইন ক্যাশে চালু করেছে, যা রিবিল্ড ২–৫ গুণ দ্রুত করে। Persistent caching রানের মধ্যে মডিউল রূপান্তর ফলাফল সংরক্ষণ করে, যা CI/CD-তে বিশেষভাবে গুরুত্বপূর্ণ। এটি সক্রিয় করতে, কনফিগারেশনে cache: { type: 'filesystem' } যোগ করুন।
Webpack চারটি মৌলিক ধারণা নিয়ে কাজ করে: Entry (এন্ট্রি পয়েন্ট), Output (আউটপুট), Loaders (রূপান্তর) এবং Plugins (এক্সটেনশন)। এই ধারণাগুলো বোঝা একটি সাধারণ সাইট থেকে জটিল এন্টারপ্রাইজ অ্যাপ্লিকেশন পর্যন্ত যেকোনো বিল্ড কনফিগার করার জন্য প্রয়োজনীয়।
Entry একটি অ্যারে বা অবজেক্ট যা এক বা একাধিক এন্ট্রি পয়েন্ট সংজ্ঞায়িত করে। মাল্টি-এন্ট্রি মাল্টি-কম্পোনেন্ট অ্যাপ্লিকেশনের জন্য ব্যবহৃত হয়। Output আউটপুট ফাইল কনফিগার করে: পাথ, নাম টেমপ্লেট, পাবলিক URL। Mode — development, production বা none — স্বয়ংক্রিয়ভাবে প্রতিটি মোডের জন্য সর্বোত্তম প্লাগইন এবং ডিফল্ট মান সক্রিয় করে।
Content Hash — ফাইলের নামে কন্টেন্ট হ্যাশ ([contenthash]) অন্তর্ভুক্ত করা দীর্ঘমেয়াদী ক্যাশিং নিশ্চিত করে। ব্রাউজার শুধুমাত্র তখনই নতুন ফাইল লোড করে যখন এর বিষয়বস্তু পরিবর্তিত হয়। SplitChunksPlugin স্বয়ংক্রিয়ভাবে বিভিন্ন entry থেকে সাধারণ নির্ভরশীলতা আলাদা চাঙ্কে বের করে, কোড ডুপ্লিকেশন প্রতিরোধ করে।
Loaders নির্ভরশীলতা গ্রাফে যোগ করার আগে সোর্স ফাইল রূপান্তর করে। প্রতিটি লোডার একটি ফাংশন যা ফাইলের বিষয়বস্তু গ্রহণ করে এবং একটি জাভাস্ক্রিপ্ট মডিউল ফেরত দেয়। Plugins আরও শক্তিশালী এক্সটেনশন যাদের সম্পূর্ণ বিল্ড লাইফসাইকেলে অ্যাক্সেস রয়েছে: স্টার্টআপ থেকে আউটপুট ফাইল জেনারেশন পর্যন্ত।
| Loader | উদ্দেশ্য | ব্যবহারের ক্ষেত্র |
|---|---|---|
| babel-loader | ES6+/JSX-কে ES5-এ ট্রান্সপাইলেশন | JSX সহ React কম্পোনেন্ট |
| ts-loader | TypeScript-কে জাভাস্ক্রিপ্টে কম্পাইলেশন | Angular, TypeScript প্রকল্প |
| css-loader | CSS-এ @import এবং url() প্রক্রিয়াকরণ | CSS মডিউল, PostCSS |
| sass-loader | SCSS/SASS-কে CSS-এ ট্রান্সপাইলেশন | Bootstrap, কাস্টম থিম |
| file-loader | আউটপুটে ফাইল কপি করা | ছবি, ফন্ট |
| svg-inline-loader | জাভাস্ক্রিপ্টে SVG ইনলাইন করা | আইকন, লোগো |
Plugins, লোডারের বিপরীতে, বিল্ডের যেকোনো পর্যায়ে কাজ করতে পারে। HtmlWebpackPlugin স্বয়ংক্রিয়ভাবে লিঙ্কড স্ক্রিপ্ট সহ HTML ফাইল তৈরি করে। MiniCssExtractPlugin সমান্তরাল লোডিংয়ের জন্য CSS আলাদা ফাইলে বের করে। DefinePlugin বিল্ডের সময় অ্যাপ্লিকেশন কোডে এনভায়রনমেন্ট ভেরিয়েবল পাস করার অনুমতি দেয়।
Webpack বিল্ট-ইন অপ্টিমাইজেশন মেকানিজম প্রদান করে: tree shaking, code splitting এবং কম্প্রেশন। Tree shaking ES মডিউল থেকে অব্যবহৃত এক্সপোর্ট সরিয়ে দেয়। Code splitting import()-এর মাধ্যমে বান্ডলকে ডায়নামিক চাঙ্কে বিভক্ত করে। Minimizer — JS-এর জন্য TerserPlugin এবং CSS-এর জন্য CssMinimizerPlugin।
// webpack.config.js — প্রোডাকশন বিল্ড অপ্টিমাইজেশন
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
terserOptions: { compress: { drop_console: true }, mangle: true },
}),
new CssMinimizerPlugin(),
],
runtimeChunk: 'single',
splitChunks: {
chunks: 'async',
minSize: 20000,
maxAsyncRequests: 30,
},
},
};
Module Federation মাইক্রো-ফ্রন্টএন্ডের জন্য Webpack 5-এর সবচেয়ে শক্তিশালী বৈশিষ্ট্য। এটি রানটাইমে অন্যান্য স্বাধীন বিল্ড থেকে মডিউল লোড করার অনুমতি দেয়। প্রতিটি মাইক্রো-অ্যাপ্লিকেশন স্বাধীনভাবে ডেভেলপ এবং ডিপ্লয় করা হয়, কিন্তু ব্যবহারকারীর জন্য একটি একক ইন্টারফেসে একত্রিত হয়। Segment Analytics ২০২১ সাল থেকে প্রোডাকশনে Module Federation ব্যবহার করছে, যা ডিপ্লয়মেন্ট সময় ৮০% কমিয়েছে।
Webpack React Native-এ সরাসরি খুব কমই ব্যবহৃত হয় — এর জন্য Metro বিদ্যমান। তবে, React Native Web প্রকল্পে Webpack ব্যবহৃত হয়, যখন একটি কোডবেস মোবাইল প্ল্যাটফর্ম (Metro-র মাধ্যমে) এবং ওয়েব (Webpack-এর মাধ্যমে) উভয়ের জন্য তৈরি করা হয়। Ionic এবং Cordova-তে হাইব্রিড অ্যাপ্লিকেশনেও Webpack জনপ্রিয়।
যেসব প্রকল্পে ওয়েব রেন্ডারিংয়ের জন্য React Native Web ব্যবহার করা হয়, Webpack কে উপনাম দিয়ে কনফিগার করা হয় যা নেটিভ মডিউলকে ওয়েব ইমপ্লিমেন্টেশন দিয়ে প্রতিস্থাপন করে। Alias react-native → react-native-web ইম্পোর্ট পরিবর্তন না করেই শেয়ার্ড কম্পোনেন্ট ব্যবহারের অনুমতি দেয়। DefinePlugin প্ল্যাটফর্ম-নির্দিষ্ট কোডের শর্তসাপেক্ষ কম্পাইলেশনের জন্য প্ল্যাটফর্ম ফ্ল্যাগ পাস করে।
মোবাইল ওয়েবের জন্য Webpack অপ্টিমাইজেশন ডেস্কটপ থেকে ভিন্ন। Mobile-first বিল্ডে আক্রমনাত্মক মিনিফিকেশন, ইমেজের lazy loading এবং ক্রিটিকাল CSS-এর অগ্রাধিকার লোডিং অন্তর্ভুক্ত। CompressionPlugin brotli কম্প্রেশন সহ 3G/4G মোবাইল নেটওয়ার্কের জন্য বান্ডল সাইজ ২০–২৫% কমায়। বিভিন্ন প্ল্যাটফর্মের জন্য কনফিগারেশন বিভক্ত করতে webpack-merge ব্যবহার করুন: মোবাইল-ফার্স্ট এবং ডেস্কটপ-অপ্টিমাইজড বিল্ড।
Module Federation Webpack 5-এর একটি বৈপ্লবিক বৈশিষ্ট্য যা npm-এ প্রকাশ না করেই অন্যান্য স্বাধীন বিল্ড থেকে জাভাস্ক্রিপ্ট মডিউল লোড করার অনুমতি দেয়। প্রতিটি মাইক্রো-অ্যাপ্লিকেশন স্বাধীনভাবে ডেভেলপ হয়, এর নিজস্ব Webpack কনফিগারেশন থাকে এবং আলাদাভাবে ডিপ্লয় হয়। Host অ্যাপ্লিকেশন ModuleFederationPlugin-এর বিশেষ কনফিগারেশনের মাধ্যমে রিমোট বিল্ড থেকে মডিউল সংযুক্ত করে।
প্রদানকারী নির্বাচিত মডিউল এক্সপোজ করে, এবং হোস্ট সেগুলো সংযোগ করতে remotes ব্যবহার করে। Module Federation শেয়ার্ড লাইব্রেরি সমর্থন করে: যদি React দুটি মাইক্রো-অ্যাপ্লিকেশনে ব্যবহার করা হয়, Webpack এটি শুধুমাত্র একবার লোড করে। এটি ব্যবহারকারীর জন্য ৬০% পর্যন্ত ট্রাফিক সাশ্রয় করে। Segment এবং Best Buy-সহ বড় কোম্পানিগুলো প্রোডাকশনে Module Federation ব্যবহার করে, ডিপ্লয়মেন্ট সময় ঘন্টা থেকে মিনিটে কমিয়ে এনেছে।
Module Federation-এর সাথে কাজ করার সময়, ডেভেলপাররা প্রায়শই বিভিন্ন সংস্করণের শেয়ার্ড নির্ভরশীলতার দ্বন্দ্বের সম্মুখীন হন। সমাধান হল গুরুত্বপূর্ণ লাইব্রেরির জন্য স্পষ্টভাবে requiredVersion এবং singleton: true উল্লেখ করা। আরেকটি সমস্যা হল রিমোট বিল্ড থেকে কম্পোনেন্ট ইম্পোর্ট করার সময় কনটেক্সট হারানো, বিশেষ করে React Context এবং Redux-এর সাথে। এটি সমাধান করতে, shared: { react: { singleton: true } } ব্যবহার করুন যাতে নিশ্চিত করা যায় যে সব মাইক্রো-অ্যাপ্লিকেশন React-এর একটি ইনস্ট্যান্স ব্যবহার করে। বড় মাইক্রো-ফ্রন্টএন্ড আর্কিটেকচারের জন্য, শেয়ার্ড নির্ভরশীলতার সংস্করণ সিঙ্ক্রোনাইজ করতে এবং বিল্ড সামঞ্জস্য নিশ্চিত করতে মোনোরেপো সিস্টেম (Nx, Turborepo) এর সাথে Module Federation ব্যবহার করার পরামর্শ দেওয়া হয়।
সচরাচর জিজ্ঞাসা
Webpack 5 persistent caching (রিবিল্ড ৫ গুণ পর্যন্ত দ্রুত করা), মাইক্রো-ফ্রন্টএন্ডের জন্য Module Federation-এর বিল্ট-ইন সমর্থন এবং স্বয়ংক্রিয় clean আউটপুট চালু করেছে। পুরনো লোডার (raw-loader, url-loader) এবং অনেক Node.js পলিফিল সরিয়ে ফেলা হয়েছে, যা কনফিগারেশনের আকার গড়ে ৩০% কমিয়েছে।
বেসিক কনফিগারেশন তৈরি করতে webpack-cli init ব্যবহার করুন। সাধারণ প্রকল্পের জন্য create-react-app (CRA) বা Next.js ব্যবহার করুন, যা Webpack কনফিগারেশন লুকিয়ে রাখে। যদি কাস্টম সেটআপ প্রয়োজন হয় — webpack-merge আপনাকে বিভিন্ন পরিবেশের জন্য কনফিগারেশন পুনর্ব্যবহারযোগ্য মডিউলে বিভক্ত করতে দেয়।
Webpack Dev Server HMR (Hot Module Replacement) সমর্থন সহ একটি বিল্ট-ইন ডেভ সার্ভার। এটি ফাইলের পরিবর্তন পর্যবেক্ষণ করে এবং সম্পূর্ণ পৃষ্ঠা রিলোড ছাড়াই ব্রাউজারে মডিউল আপডেট করে। মোবাইল ডেভেলপমেন্টের জন্য, ডেভ সার্ভারকে host: '0.0.0.0' এবং HTTPS সার্টিফিকেট উল্লেখ করে লোকাল নেটওয়ার্কে অ্যাক্সেসযোগ্য কনফিগার করা যেতে পারে।
Webpack 5 ছবি প্রক্রিয়াকরণের জন্য বিল্ট-ইন Asset Modules ব্যবহার করে: asset/resource ফাইলটি যেমন আছে তেমন কপি করে, asset/inline এটি base64 হিসাবে ইনলাইন করে (8KB-এর কম ফাইলের জন্য), asset আকারের ভিত্তিতে স্বয়ংক্রিয়ভাবে নির্বাচন করে। ছবি অপ্টিমাইজেশনের জন্য, WebP কম্প্রেশন এবং লসলেস অপ্টিমাইজেশন সহ image-webpack-loader যোগ করুন।
নতুন প্রকল্পের জন্য — হ্যাঁ, Vite উল্লেখযোগ্য গতি বৃদ্ধি প্রদান করে। শত শত Webpack প্লাগইন সহ বিদ্যমান এন্টারপ্রাইজ প্রকল্পের জন্য — মাইগ্রেশনে ২–৪ সপ্তাহ লাগতে পারে। ডেভ বিল্ড স্পিড কতটা গুরুত্বপূর্ণ তা মূল্যায়ন করুন: যদি সম্পূর্ণ বিল্ড সময় ৫ মিনিটের বেশি হয়, তাহলে মাইগ্রেশন যুক্তিযুক্ত।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন