المقارنة

webpack ليس أداة تحزيم الوحدات الوحيدة. إذا كنت تفاضل بين استخدام webpack أو إحدى الأدوات التالية، فهذا جدول يقارن الميزات نقطة بنقطة ويوضح كيف يقف webpack أمام المنافسين الحاليين.

الميزةwebpack/webpackjrburke/requirejssubstack/node-browserifyjspm/jspm-clirollup/rollupbrunch/brunch
تحميل chunks إضافية عند الطلبنعمنعملاSystem.importلالا
AMD defineنعمنعمdeamdifyنعمrollup-plugin-amdنعم
AMD requireنعمنعملانعملانعم
تحميل AMD require عند الطلبنعميتطلب ضبطًا يدويًالانعملالا
CommonJS exportsنعمفقط عند التغليف داخل defineنعمنعمcommonjs-pluginنعم
CommonJS requireنعمفقط عند التغليف داخل defineنعمنعمcommonjs-pluginنعم
CommonJS require.resolveنعملالالالا-
الدمج داخل require require("./fi" + "le")نعملا♦لالالا-
دعم التصحيحSourceUrl, SourceMapsغير مطلوبSourceMapsSourceUrl, SourceMapsSourceUrl, SourceMapsSourceMaps
التبعيات19MB / 127 حزمة11MB / 118 حزمة1.2MB / 1 حزمة26MB / 131 حزمة?MB / 3 حزم-
ES2015 import/exportنعم (webpack 2)لالانعمنعمنعم، عبر es6 module transpiler
التعابير داخل require (موجهة) require("./templates/" + template)نعم (تُضمّن كل الملفات المطابقة)لا♦لالالالا
التعابير داخل require (حرة) require(moduleName)يتطلب ضبطًا يدويًالا♦لالالا-
إنشاء bundle واحدنعمنعم♦نعمنعمنعمنعم
require غير مباشر var r = require; r("./file")نعملا♦لالالا-
تحميل كل ملف على حدةلانعملانعملالا
تغيير أسماء المساراتنعملاجزئيًانعمغير مطلوب (أسماء المسارات لا تُضمّن في bundle)لا
التصغير (Minification)Terseruglify, closure compileruglifyifyنعمuglify-pluginUglifyJS-brunch
بناء صفحات متعددة مع bundle مشتركيتطلب ضبطًا يدويًانعميتطلب ضبطًا يدويًاباستخدام حسابات bundleلالا
عدة bundlesنعميتطلب ضبطًا يدويًايتطلب ضبطًا يدويًانعملانعم
مكتبات Node.js المدمجة require("path")نعملانعمنعمnode-resolve-plugin-
عناصر Node.js الأخرىprocess, __dir/filename, global-process, __dir/filename, globalprocess, __dir/filename, global لـ cjsglobal (commonjs-plugin)-
Pluginsنعمنعمنعمنعمنعمنعم
المعالجة المسبقةloadersloadersتحويلاتتحويل عبر pluginتحويلات عبر plugincompilers, optimizers
الاستبدال الخاص بالمتصفحweb_modules, .web.js, package.json field, alias configuration optionalias optionpackage.json field, alias optionpackage.json, alias optionلا-
الملفات التي يمكن طلبها عبر requireنظام الملفاتwebنظام الملفاتعبر pluginsنظام الملفات أو عبر pluginsنظام الملفات
الكلفة الإضافية وقت التشغيل243B + 20B لكل module + 4B لكل dependency14.7kB + 0B لكل module + (3B + X) لكل dependency415B + 25B لكل module + (6B + 2X) لكل dependency5.5kB لـ self-executing bundles، و38kB للـ loader الكامل مع polyfill، و0 للـ plain modules، و293B لـ CJS، و139B لـ ES2015 System.register قبل gzipلا توجد لوحدات ES2015 (قد توجد في الصيغ الأخرى)-
وضع المراقبةنعمغير مطلوبwatchifyغير مطلوب أثناء التطويرrollup-watchنعم

♦ في وضع الإنتاج (والعكس في وضع التطوير)

X تمثل طول سلسلة المسار.

التحزيم (Bundling) مقابل التحميل (Loading)

من المهم توضيح بعض الفروقات الأساسية بين تحميل الوحدات وتحزيمها. أداة مثل SystemJS، وهي مستخدمة داخليًا في JSPM، تُستخدم لتحميل الوحدات وتحويلها وقت التشغيل داخل المتصفح. يختلف هذا كثيرًا عن webpack، حيث تُحوّل الوحدات عبر "loaders" ثم تُحزّم قبل أن تصل إلى المتصفح.

لكل أسلوب مزاياه وعيوبه. تحميل الوحدات وتحويلها وقت التشغيل قد يضيف كلفة كبيرة على المواقع والتطبيقات الأكبر، خصوصًا عندما تتكون من عدد كبير من الوحدات. لذلك يكون SystemJS أنسب للمشاريع الأصغر التي تحتاج إلى وحدات أقل. قد يتغير هذا جزئيًا مع HTTP/2 لأنه يحسن سرعة نقل الملفات من الخادم إلى العميل. لكن لاحظ أن HTTP/2 لا يغير شيئًا في تكلفة تحويل الوحدات، فهي ستبقى أبطأ عندما تتم من جهة العميل.

Edit this page·

1 Contributor

RlxChap2