Webpack هو أداة تجميع قوية مفتوحة المصدر أصبحت المعيار الفعلي لتجميع تطبيقات JavaScript. يأخذ الوحدات ذات التبعيات ويولد موارد ثابتة محسّنة للمتصفح أو بيئة تشغيل أخرى. وفقًا لـ Webpack Documentation (2026)، يضم النظام البيئي أكثر من 15 ألف أداة تحميل وإضافة لأي مهمة تجميع.
الخلاصة
Webpack هو أداة تجميع وحدات تحلل تبعيات التطبيق وتعبئتها في ملفات ثابتة للمتصفح أو الخادم. تم إنشاؤه بواسطة Tobias Koppers في عام 2012، وسرعان ما أصبح Webpack معيار التجميع بفضل مفهوم جميع الملفات هي وحدات: JavaScript، CSS، الصور، الخطوط وحتى HTML تتم معالجتها من خلال نظام واحد من اللوادر.
Webpack قدّم فكرة ثورية في عصره: تسمح اللوادر بتضمين أي مورد عبر import أو require. حرّر هذا المطورين من الحاجة إلى استخدام أدوات منفصلة لمعالجات CSS المسبقة (SCSS)، ومجمّعات TypeScript ومحسّنات الصور. بحلول عام 2020، كان Webpack يُستخدم في أكثر من 80% من مشاريع JavaScript (بيانات npm stat: 2019–2024).
المنافسون — Vite و Parcel و Turbopack — يقدمون سرعة تطوير أعلى، لكن Webpack يحتفظ بالريادة في قطاع المؤسسات بفضل الاستقرار والنظام البيئي الناضج والتوافق العكسي. يستغرق الانتقال من Webpack إلى Vite في المشاريع الكبيرة أسابيع وغالبًا ما يُعوق بسبب عدم توافق الإضافات.
Webpack يبني رسمًا بيانيًا للتبعيات بدءًا من نقطة الدخول. كل import أو require يتم العثور عليه يُضاف إلى الرسم البياني، ويمر عبر سلسلة من اللوادر ويُوضع في chunk. يعتمد المخرجات النهائية على التكوين: حزمة واحدة، عدة chunks أو مخرجات مكتبة بتنسيقات 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 تخزينًا مؤقتًا مدمجًا يعتمد على نظام الملفات، مما يسرّع إعادة التجميع بمقدار 2–5 مرات. التخزين المؤقت المستمر يحفظ نتائج تحويل الوحدات بين عمليات التشغيل، وهو أمر مهم بشكل خاص في CI/CD. لتفعيله،只需 إضافة cache: { type: 'filesystem' } إلى التكوين.
يعمل Webpack بأربعة مفاهيم أساسية: Entry (نقطة الدخول)، Output (المخرجات)، Loaders (التحويلات) و Plugins (الإضافات). فهم هذه المفاهيم ضروري لتكوين أي تجميع من موقع بسيط إلى تطبيق مؤسسي معقد.
Entry هو مصفوفة أو كائن يحدد نقطة دخول واحدة أو أكثر. يُستخدم multi-entry للتطبيقات متعددة المكونات. Output يهيئ ملفات المخرجات: المسار، قالب الاسم، URL العام. Mode — development أو production أو none — يقوم تلقائيًا بتفعيل الإضافات المثلى والقيم الافتراضية لكل وضع.
Content Hash — تضمين تجزئة المحتوى في اسم الملف ([contenthash]) يضمن التخزين المؤقت طويل الأمد. يقوم المتصفح بتحميل ملف جديد فقط عندما يتغير محتواه. SplitChunksPlugin يستخرج تلقائيًا التبعيات المشتركة من نقاط الدخول المختلفة إلى chunks منفصلة، مما يمنع تكرار الكود.
Loaders تحول الملفات المصدر قبل إضافتها إلى الرسم البياني للتبعيات. كل loader هو دالة تستقبل محتوى الملف وتعيد وحدة JavaScript. Plugins هي إضافات أكثر قوة لديها إمكانية الوصول إلى دورة حياة التجميع بأكملها: من البداية إلى إنشاء ملفات المخرجات.
| Loader | الغرض | حالة الاستخدام |
|---|---|---|
| babel-loader | ترجمة ES6+/JSX إلى ES5 | مكونات React مع JSX |
| ts-loader | تجميع TypeScript إلى JavaScript | Angular، مشاريع TypeScript |
| css-loader | معالجة @import و url() في CSS | وحدات CSS، PostCSS |
| sass-loader | ترجمة SCSS/SASS إلى CSS | Bootstrap، سمات مخصصة |
| file-loader | نسخ الملفات إلى المخرجات | الصور، الخطوط |
| svg-inline-loader | تضمين SVG في JavaScript | الأيقونات، الشعارات |
Plugins، على عكس اللوادر، يمكنها تنفيذ إجراءات في أي مرحلة من التجميع. HtmlWebpackPlugin يولد تلقائيًا ملف HTML مع البرامج النصية المرتبطة. MiniCssExtractPlugin يستخرج CSS إلى ملفات منفصلة للتحميل المتوازي. DefinePlugin يسمح بتمرير متغيرات البيئة إلى كود التطبيق أثناء التجميع.
Webpack يوفر آليات تحسين مدمجة: tree shaking و code splitting والضغط. Tree shaking يزيل الصادرات غير المستخدمة من وحدات ES. Code splitting عبر import() يقسم الحزمة إلى chunks ديناميكية. Minimizer — TerserPlugin لـ JS و CssMinimizerPlugin لـ CSS.
// 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 في الإنتاج منذ 2021، مما قلّل وقت النشر بنسبة 80%.
Webpack نادرًا ما يُستخدم مباشرة في React Native — لهذا يوجد Metro. ومع ذلك، يُستخدم Webpack في مشاريع React Native Web، عندما يتم تجميع قاعدة كود واحدة لمنصات المحمول (عبر Metro) والويب (عبر Webpack). Webpack شائع أيضًا في التطبيقات الهجينة مع Ionic و Cordova.
للمشاريع التي يُستخدم فيها React Native Web للعرض على الويب، يتم تكوين Webpack مع أسماء مستعارة تستبدل الوحدات الأصلية بتطبيقات ويب. Alias react-native → react-native-web يسمح باستخدام المكونات المشتركة دون تغيير الاستيرادات. DefinePlugin يمرر علامة المنصة للتجميع الشرطي للكود الخاص بالمنصة.
يختلف تحسين Webpack للويب المحمول عن سطح المكتب. التجميع Mobile-first يشمل تصغيرًا عدوانيًا، lazy loading للصور وتحميلًا ذا أولوية لـ CSS الحرج. CompressionPlugin مع ضغط brotli يقلل حجم الحزمة بنسبة 20–25% لشبكات المحمول 3G/4G. استخدم webpack-merge لتقسيم التكوينات لمنصات مختلفة: تجميعات mobile-first ومحسّنة لسطح المكتب.
Module Federation هي ميزة ثورية في Webpack 5 تتيح تحميل وحدات JavaScript من تجميعات مستقلة أخرى دون نشرها في npm. يتم تطوير كل تطبيق مصغر بشكل مستقل، وله تكوين Webpack الخاص به ويُنتشر بشكل منفصل. التطبيق Host يربط الوحدات من التجميعات البعيدة عبر تكوين خاص لـ ModuleFederationPlugin.
المزوّد يُصدر وحدات محددة، ويستخدم المضيف remotes لربطها. تدعم Module Federation المكتبات المشتركة: إذا تم استخدام React في تطبيقين مصغرين، يقوم Webpack بتحميلها مرة واحدة فقط. هذا يوفر ما يصل إلى 60% من حركة المرور للمستخدم. تستخدم شركات كبيرة، بما في ذلك Segment و Best Buy، Module Federation في الإنتاج، مما قلّل وقت النشر من ساعات إلى دقائق.
عند العمل مع Module Federation، غالبًا ما يواجه المطورون تعارضات في التبعيات المشتركة من إصدارات مختلفة. الحل هو تحديد requiredVersion و singleton: true صراحةً للمكتبات الحرجة. مشكلة أخرى هي فقدان السياق عند استيراد المكونات من تجميع بعيد، خاصةً مع React Context و Redux. لحل ذلك، استخدم shared: { react: { singleton: true } } لضمان أن جميع التطبيقات المصغرة تستخدم نسخة واحدة من React. للبنى الميكروفرونتندية الكبيرة، يُنصح باستخدام Module Federation مع نظام المستودع الأحادي (Nx, Turborepo) لمزامنة إصدارات التبعيات المشتركة وضمان اتساق التجميعات.
الأسئلة الشائعة
قدّم Webpack 5 التخزين المؤقت المستمر (تسريع إعادة التجميع حتى 5 مرات)، ودعمًا مدمجًا لـ Module Federation للميكروفرونتند ومخرجات clean تلقائية. تمت إزالة اللوادر القديمة (raw-loader, url-loader) والعديد من polyfills الخاصة بـ Node.js، مما قلّل حجم التكوين بمتوسط 30%.
استخدم 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 يختار تلقائيًا بناءً على الحجم. لتحسين الصور، أضف image-webpack-loader مع ضغط WebP وتحسين بدون فقدان.
للمشاريع الجديدة — نعم، Vite يوفر زيادة كبيرة في السرعة. للمشاريع المؤسسية الحالية ذات المئات من إضافات Webpack — قد يستغرق الترحيل 2–4 أسابيع. قيّم مدى أهمية سرعة التجميع التطويري: إذا تجاوز وقت التجميع الكامل 5 دقائق، فإن الترحيل مبرر.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا