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.

  • Parameters الخاصة بالـ callback: context، entry
compiler.hooks.entryOption.tap("MyPlugin", (context, entry) => {
  /* ... */
});

afterPlugins

SyncHook

يُستدعى بعد إعداد المجموعة الأولية من plugins الداخلية.

  • Parameters الخاصة بالـ callback: compiler

afterResolvers

SyncHook

يُطلق بعد اكتمال إعداد resolvers.

  • Parameters الخاصة بالـ callback: compiler

validate

SyncHook

5.106.0+

يُستدعى لتسجيل أعمال التحقق من إعدادات 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
Edit this page·

1 Contributor

RlxChap2