Compiler Hooks
يُعد module المسمى Compiler المحرك الرئيسي الذي ينشئ instance من compilation باستخدام كل الخيارات القادمة من CLI أو Node API. يرث Compiler من الصنف Tapable حتى يتمكن من تسجيل plugins واستدعائها. أغلب plugins التي يتعامل معها المستخدم تُسجل أولًا على Compiler.
عند تطوير plugin لـ webpack، قد تحتاج إلى معرفة أين يتم استدعاء كل hook. لمعرفة ذلك، ابحث عن hooks.<hook name>.call داخل مصدر webpack.
Watching
يدعم Compiler وضع watching، وفيه يراقب نظام الملفات ويعيد compilation عند تغيّر الملفات. عند استخدام watch mode، يطلق compiler أحداثًا إضافية مثل watchRun وwatchClose وinvalid. يستخدم هذا غالبًا أثناء development، عادةً من خلال أدوات مثل webpack-dev-server، حتى لا يحتاج المطور إلى إعادة compilation يدويًا في كل مرة. ويمكن تفعيل watch mode أيضًا من CLI.
Hooks
يعرض compiler hooks التالية ضمن دورة حياته، ويمكن الوصول إليها بهذا الشكل:
compiler.hooks.someHook.tap("MyPlugin", (params) => {
/* ... */
});بحسب نوع hook، قد تكون tapAsync وtapPromise متاحتين أيضًا.
لوصف أنواع hooks، راجع توثيق Tapable.
environment
SyncHook
يُستدعى أثناء تجهيز بيئة compiler، مباشرة بعد تهيئة plugins الموجودة في ملف الإعدادات.
afterEnvironment
SyncHook
يُستدعى مباشرة بعد hook المسمى environment، عندما يكتمل إعداد بيئة compiler.
entryOption
SyncBailHook
يُستدعى بعد معالجة إعداد entry من خيارات webpack.
compiler.hooks.entryOption.tap("MyPlugin", (context, entry) => {
/* ... */
});afterPlugins
SyncHook
يُستدعى بعد إعداد المجموعة الأولية من plugins الداخلية.
- Parameters الخاصة بالـ callback:
compiler
afterResolvers
SyncHook
يُطلق بعد اكتمال إعداد resolvers.
- Parameters الخاصة بالـ callback:
compiler
validate
SyncHook
يُستدعى لتسجيل أعمال التحقق من إعدادات webpack وplugins وloaders. يستطيع مؤلفو plugins استخدام هذا hook واستدعاء compiler.validate(...) للمشاركة في مسار التحقق المدمج داخل webpack.
compiler.hooks.validate.tap("MyPlugin", () => {
compiler.validate(
() => require("./schema/MyPlugin.json"),
options,
{ name: "My Plugin", baseDataPath: "options" },
(validatedOptions) => require("./schema/MyPlugin.check")(validatedOptions),
);
});initialize
SyncHook
يُستدعى عند تهيئة كائن compiler.
beforeRun
AsyncSeriesHook
يضيف hook قبل تشغيل compiler مباشرة.
- Parameters الخاصة بالـ callback:
compiler
run
AsyncSeriesHook
يدخل إلى compiler قبل أن يبدأ بقراءة records.
- Parameters الخاصة بالـ callback:
compiler
watchRun
AsyncSeriesHook
ينفّذ plugin أثناء watch mode بعد تشغيل compilation جديد، وقبل أن يبدأ compilation فعليًا.
- Parameters الخاصة بالـ callback:
compiler
normalModuleFactory
SyncHook
يُستدعى بعد إنشاء NormalModuleFactory.
- Parameters الخاصة بالـ callback:
normalModuleFactory
contextModuleFactory
SyncHook
يشغّل plugin بعد إنشاء ContextModuleFactory.
- Parameters الخاصة بالـ callback:
contextModuleFactory
beforeCompile
AsyncSeriesHook
ينفّذ plugin بعد إنشاء parameters الخاصة بـ compilation.
- Parameters الخاصة بالـ callback:
compilationParams
يتم تهيئة المتغير compilationParams بهذا الشكل:
compilationParams = {
normalModuleFactory,
contextModuleFactory,
};يمكن استخدام هذا hook لإضافة أو تعديل parameters الخاصة بـ compilation:
compiler.hooks.beforeCompile.tapAsync("MyPlugin", (params, callback) => {
params["MyPlugin - data"] = "important stuff my plugin will use later";
callback();
});compile
SyncHook
يُستدعى مباشرة بعد beforeCompile، وقبل إنشاء compilation جديد. لا يتم نسخ هذا hook إلى child compilers.
- Parameters الخاصة بالـ callback:
compilationParams
thisCompilation
SyncHook
يُنفّذ أثناء تهيئة compilation، مباشرة قبل إطلاق حدث compilation. لا يتم نسخ هذا hook إلى child compilers.
- Parameters الخاصة بالـ callback:
compilation,compilationParams
compilation
SyncHook
يشغّل plugin بعد إنشاء compilation.
- Parameters الخاصة بالـ callback:
compilation,compilationParams
make
AsyncParallelHook
يُنفّذ قبل إنهاء compilation. لا يتم نسخ هذا hook إلى child compilers.
- Parameters الخاصة بالـ callback:
compilation
afterCompile
AsyncSeriesHook
يُستدعى بعد إنهاء compilation وعمل seal له.
- Parameters الخاصة بالـ callback:
compilation
shouldEmit
SyncBailHook
يُستدعى قبل إخراج assets. يجب أن يرجع قيمة boolean توضّح هل سيتم الإخراج أم لا.
- Parameters الخاصة بالـ callback:
compilation
compiler.hooks.shouldEmit.tap(
"MyPlugin",
(compilation) =>
// أرجع true لإخراج الملفات، أو false لمنع الإخراج
true,
);emit
AsyncSeriesHook
يُنفّذ مباشرة قبل إخراج assets إلى مجلد output. لا يتم نسخ هذا hook إلى child compilers.
- Parameters الخاصة بالـ callback:
compilation
afterEmit
AsyncSeriesHook
يُستدعى بعد إخراج assets إلى مجلد output. لا يتم نسخ هذا hook إلى child compilers.
- Parameters الخاصة بالـ callback:
compilation
assetEmitted
AsyncSeriesHook
يُنفّذ عندما يتم إخراج asset. يتيح الوصول إلى معلومات عن asset الذي أُخرج، مثل مسار الإخراج ومحتواه بالبايت.
- Parameters الخاصة بالـ callback:
file,info
مثلًا، يمكنك الوصول إلى buffer الخاص بمحتوى asset عبر info.content:
compiler.hooks.assetEmitted.tap(
"MyPlugin",
(file, { content, source, outputPath, compilation, targetPath }) => {
console.log(content); // <Buffer 66 6f 6f 62 61 72>
},
);done
AsyncSeriesHook
يُنفّذ عندما يكتمل compilation. لا يتم نسخ هذا hook إلى child compilers.
- Parameters الخاصة بالـ callback:
stats
additionalPass
AsyncSeriesHook
يسمح لك هذا hook بتنفيذ مرور إضافي آخر لعملية build.
failed
SyncHook
يُستدعى إذا فشل compilation.
- Parameters الخاصة بالـ callback:
error
invalid
SyncHook
يُنفّذ عندما يتم إبطال compilation في وضع watching. لا يتم نسخ هذا hook إلى child compilers.
- Parameters الخاصة بالـ callback:
fileName,changeTime
watchClose
SyncHook
يُستدعى عندما يتوقف watching compilation.
shutdown
AsyncSeriesHook
يُستدعى عندما يبدأ compiler بالإغلاق.
infrastructureLog
SyncBailHook
يسمح باستخدام infrastructure logging عند تفعيله في الإعدادات عبر خيار infrastructureLogging.
- Parameters الخاصة بالـ callback:
name,type,args
log
SyncBailHook
يسمح بالتسجيل داخل stats عند تفعيله. راجع خيارات stats.logging وstats.loggingDebug وstats.loggingTrace.
- Parameters الخاصة بالـ callback:
origin,logEntry



