Webpack:compiler 鉤子

2023-05-10 16:27 更新

Compiler 模塊是 webpack 的主要引擎,它通過 CLI 或者 Node API 傳遞的所有選項創(chuàng)建出一個 compilation 實例。 它擴展(extends)自 Tapable 類,用來注冊和調(diào)用插件。 大多數(shù)面向用戶的插件會首先在 Compiler 上注冊。

在為 webpack 開發(fā)插件時,你可能需要知道每個鉤子函數(shù)是在哪里調(diào)用的。想要了解這些內(nèi)容,請在 webpack 源碼中搜索 ?hooks.<hook name>.call?。

監(jiān)聽(watching)

Compiler 支持可以監(jiān)控文件系統(tǒng)的 監(jiān)聽(watching) 機制,并且在文件修改時重新編譯。 當(dāng)處于監(jiān)聽模式(watch mode)時, compiler 會觸發(fā)諸如 ?watchRun?, ?watchClose? 和 ?invalid? 等額外的事件。 通常在 開發(fā)環(huán)境 中使用, 也常常會在 ?webpack-dev-server? 這些工具的底層調(diào)用, 由此開發(fā)人員無須每次都使用手動方式重新編譯。 還可以通過 CLI 進入監(jiān)聽模式。

鉤子

以下生命周期鉤子函數(shù),是由 compiler 暴露, 可以通過如下方式訪問:

compiler.hooks.someHook.tap('MyPlugin', (params) => {
  /* ... */
});

取決于不同的鉤子類型,也可以在某些鉤子上訪問 tapAsync 和 tapPromise。

environment

SyncHook

在編譯器準(zhǔn)備環(huán)境時調(diào)用,時機就在配置文件中初始化插件之后。

afterEnvironment $#afterEnvironment$

SyncHook

當(dāng)編譯器環(huán)境設(shè)置完成后,在 ?environment? hook 后直接調(diào)用。

entryOption

SyncBailHook

在 webpack 選項中的 entry 被處理過之后調(diào)用。

  • 回調(diào)參數(shù):?context?, ?entry?
compiler.hooks.entryOption.tap('MyPlugin', (context, entry) => {
  /* ... */
});

afterPlugins

SyncHook

在初始化內(nèi)部插件集合完成設(shè)置之后調(diào)用。

  • 回調(diào)參數(shù):compiler

afterResolvers

SyncHook

resolver 設(shè)置完成之后觸發(fā)。

  • 回調(diào)參數(shù):?compiler?

initialize

SyncHook

當(dāng)編譯器對象被初始化時調(diào)用。

beforeRun

AsyncSeriesHook

在開始執(zhí)行一次構(gòu)建之前調(diào)用,compiler.run 方法開始執(zhí)行后立刻進行調(diào)用。

  • 回調(diào)參數(shù):?compiler?

run

AsyncSeriesHook

在開始讀取 records 之前調(diào)用。

  • 回調(diào)參數(shù):?compiler?

watchRun

AsyncSeriesHook

在監(jiān)聽模式下,一個新的 compilation 觸發(fā)之后,但在 compilation 實際開始之前執(zhí)行。

  • 回調(diào)參數(shù):?compiler?

normalModuleFactory

SyncHook

NormalModuleFactory 創(chuàng)建之后調(diào)用。

  • 回調(diào)參數(shù):?normalModuleFactory?

contextModuleFactory

SyncHook

ContextModuleFactory 創(chuàng)建之后調(diào)用。

  • 回調(diào)參數(shù):?contextModuleFactory?

beforeCompile

AsyncSeriesHook

在創(chuàng)建 compilation parameter 之后執(zhí)行。

  • 回調(diào)參數(shù):?compilationParams?

初始化 ?compilationParams? 變量的示例如下:

compilationParams = {
  normalModuleFactory,
  contextModuleFactory,
};

此鉤子可用于添加/修改 compilation parameter:

compiler.hooks.beforeCompile.tapAsync('MyPlugin', (params, callback) => {
  params['MyPlugin - data'] = 'important stuff my plugin will use later';
  callback();
});

compile

SyncHook

?beforeCompile? 之后立即調(diào)用,但在一個新的 compilation 創(chuàng)建之前。這個鉤子 不會 被復(fù)制到子編譯器。

  • 回調(diào)參數(shù):?compilationParams?

thisCompilation

SyncHook

初始化 compilation 時調(diào)用,在觸發(fā) ?compilation? 事件之前調(diào)用。這個鉤子 不會 被復(fù)制到子編譯器。

  • 回調(diào)參數(shù):?compilation?, ?compilationParams?

compilation

SyncHook

compilation 創(chuàng)建之后執(zhí)行。

  • 回調(diào)參數(shù):?compilation?, ?compilationParams?

make

AsyncParallelHook

compilation 結(jié)束之前執(zhí)行。這個鉤子不會被復(fù)制到子編譯器。

  • 回調(diào)參數(shù):?compilation?

afterCompile

AsyncSeriesHook

compilation 結(jié)束和封印之后執(zhí)行。

  • 回調(diào)參數(shù):?compilation?

shouldEmit

SyncBailHook

在輸出 asset 之前調(diào)用。返回一個布爾值,告知是否輸出。

  • 回調(diào)參數(shù):?compilation?
compiler.hooks.shouldEmit.tap('MyPlugin', (compilation) => {
  // 返回 true 以輸出 output 結(jié)果,否則返回 false
  return true;
});

emit

AsyncSeriesHook

輸出 asset 到 output 目錄之前執(zhí)行。這個鉤子 不會 被復(fù)制到子編譯器。

  • 回調(diào)參數(shù):?compilation?

afterEmit

AsyncSeriesHook

輸出 asset 到 output 目錄之后執(zhí)行。這個鉤子 不會 被復(fù)制到子編譯器。

  • 回調(diào)參數(shù):?compilation?

assetEmitted

AsyncSeriesHook

在 asset 被輸出時執(zhí)行。此鉤子可以訪問被輸出的 asset 的相關(guān)信息,例如它的輸出路徑和字節(jié)內(nèi)容。

  • 回調(diào)參數(shù):?file?, ?info?

例如,可以通過 ?info.content? 訪問 asset 的內(nèi)容 buffer:

compiler.hooks.assetEmitted.tap(
  'MyPlugin',
  (file, { content, source, outputPath, compilation, targetPath }) => {
    console.log(content); // <Buffer 66 6f 6f 62 61 72>
  }
);

done

AsyncSeriesHook

在 compilation 完成時執(zhí)行。這個鉤子 不會 被復(fù)制到子編譯器。

  • 回調(diào)參數(shù):?stats?

additionalPass

AsyncSeriesHook

This hook allows you to do a one more additional pass of the build.

failed

SyncHook

在 compilation 失敗時調(diào)用。

  • 回調(diào)參數(shù):?error?

invalid

SyncHook

在一個觀察中的 compilation 無效時執(zhí)行。這個鉤子 不會 被復(fù)制到子編譯器。

  • 回調(diào)參數(shù):?fileName?, ?changeTime?

watchClose

SyncHook

在一個觀察中的 compilation 停止時執(zhí)行。

shutdown

AsyncSeriesHook

當(dāng)編譯器關(guān)閉時調(diào)用。

infrastructureLog 

SyncBailHook

在配置中啟用 ?infrastructureLogging? 選項 后,允許使用 infrastructure log(基礎(chǔ)日志)。

  • 回調(diào)參數(shù):?name?, ?type?, ?args?

log

SyncBailHook

啟用后允許記錄到 stats 對象,請參閱 stats.logging, stats.loggingDebug 和 stats.loggingTrace 選項。

  • 回調(diào)參數(shù):origin, logEntry


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號