Module Resolution
المحلّل resolver هو مكتبة تساعد في العثور على وحدة من خلال مسارها المطلق. يمكن طلب وحدة تبعية من وحدة أخرى بهذا الشكل:
import foo from "path/to/module";
// or
require("path/to/module");يمكن أن تأتي وحدة التبعية من كود التطبيق أو من مكتبة خارجية. يساعد resolver webpack في العثور على كود الوحدة الذي يجب تضمينه في الحزمة لكل تعليمة require أو import.
يستخدم webpack مكتبة enhanced-resolve لحل مسارات الملفات أثناء تجميع الوحدات.
قواعد الحل في webpack
باستخدام enhanced-resolve، يستطيع webpack حل ثلاثة أنواع من مسارات الملفات:
المسارات المطلقة
import "/home/me/file";
import "C:\\Users\\me\\file";بما أننا نملك المسار المطلق إلى الملف بالفعل، فلا حاجة إلى حل إضافي.
المسارات النسبية
import "../src/file1";
import "./file2";في هذه الحالة، يُعتبر مجلد الملف المصدري الذي تظهر فيه تعليمة import أو require هو مجلد السياق. يُدمج المسار النسبي المحدد في import/require مع مسار السياق هذا لإنتاج المسار المطلق للوحدة.
مسارات الوحدات
import "my-module";
import "my-module/lib/file";يُبحث عن الوحدات داخل كل المجلدات المحددة في resolve.modules.
يمكنك استبدال مسار الوحدة الأصلي بمسار بديل عبر إنشاء alias له باستخدام خيار التكوين resolve.alias.
- إذا كانت الحزمة تحتوي ملف
package.json، فسيُبحث في الحقول المحددة في خيارresolve.exportsFieldsبالترتيب، وأول حقل من هذا النوع داخلpackage.jsonيحدد الصادرات المتاحة من الحزمة وفقًا لـ دليل package exports.
بعد حل المسار بناءً على القواعد أعلاه، يتحقق resolver مما إذا كان المسار يشير إلى ملف أو مجلد. إذا كان المسار يشير إلى ملف:
- إذا كان المسار يحتوي امتداد ملف، فسيُجمع الملف مباشرة.
- وإلا، يُحل امتداد الملف باستخدام خيار
resolve.extensions، الذي يخبر resolver بالامتدادات المقبولة للحل، مثل.jsو.jsx.
إذا كان المسار يشير إلى مجلد، تُتبع الخطوات الآتية للعثور على الملف الصحيح بالامتداد الصحيح:
- إذا كان المجلد يحتوي ملف
package.json، فسيُبحث في الحقول المحددة في خيارresolve.mainFieldsبالترتيب، وأول حقل من هذا النوع داخلpackage.jsonيحدد مسار الملف. - إذا لم يوجد
package.jsonأو لم تُرجعresolve.mainFieldsمسارًا صالحًا، فسيُبحث عن أسماء الملفات المحددة في خيارresolve.mainFilesبالترتيب لمعرفة ما إذا كان يوجد اسم ملف مطابق داخل المجلد المستورد أو المطلوب. - بعد ذلك يُحل امتداد الملف بالطريقة نفسها باستخدام خيار
resolve.extensions.
يوفر webpack قيمًا افتراضية معقولة لهذه الخيارات بحسب هدف البناء.
حلّ المحمّلات
يتبع ذلك القواعد نفسها المحددة لحل الملفات. لكن يمكن استخدام خيار التكوين resolveLoader لتوفير قواعد حل منفصلة للمحمّلات.
التخزين المؤقت
يُخزن كل وصول إلى نظام الملفات مؤقتًا حتى تتم الطلبات المتوازية أو المتسلسلة المتعددة إلى الملف نفسه بسرعة أكبر. في وضع المراقبة، تُخرج الملفات المعدلة فقط من cache. إذا كان وضع المراقبة معطلًا، فسيُفرغ cache قبل كل عملية ترجمة.
راجع Resolve API لتتعلم المزيد عن خيارات التكوين المذكورة أعلاه.



