編譯器掛勾

Compiler 模組是建立編譯實例的主要引擎,其中包含所有透過 CLINode API 傳遞的選項。它延伸 Tapable 類別以註冊和呼叫外掛。大多數面向使用者的外掛會先在 Compiler 上註冊。

在為 webpack 開發外掛時,您可能想知道每個掛鉤的呼叫位置。若要了解這一點,請在 webpack 來源中搜尋 hooks.<hook name>.call

監控

Compiler 支援 監控,它會監控檔案系統並在檔案變更時重新編譯。在監控模式下,編譯器會發出其他事件,例如 watchRunwatchCloseinvalid。這通常用於 開發 中,通常在 webpack-dev-server 等工具的幕後進行,這樣開發人員就不需要每次都手動重新編譯。也可以透過 CLI 進入監控模式。

Hooks

下列生命週期 Hooks 由 compiler 公開,且可以如此存取

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

根據 Hook 類型,tapAsynctapPromise 也可能可用。

有關 Hook 類型的說明,請參閱 Tapable 文件

environment

SyncHook

在準備編譯器環境時呼叫,緊接在組態檔中初始化外掛之後。

afterEnvironment

SyncHook

environment Hook 之後呼叫,當編譯器環境設定完成時。

entryOption

SyncBailHook

在 webpack 選項中的 entry 組態 已處理完畢後呼叫。

compiler.hooks.entryOption.tap('MyPlugin', (context, entry) => {
  /* ... */
});

afterPlugins

SyncHook

在設定一組初始內部外掛後呼叫。

  • 回呼參數:compiler

afterResolvers

SyncHook

在解析器設定完成後觸發。

  • 回呼參數:compiler

initialize

SyncHook

在編譯器物件初始化時呼叫。

beforeRun

AsyncSeriesHook

在執行編譯器之前新增一個掛勾。

  • 回呼參數:compiler

執行

AsyncSeriesHook

在編譯器開始讀取記錄之前掛入編譯器。

  • 回呼參數:compiler

watchRun

AsyncSeriesHook

在觸發新的編譯後,但在實際開始編譯之前,在監控模式期間執行外掛程式。

  • 回呼參數:compiler

normalModuleFactory

SyncHook

在建立NormalModuleFactory之後呼叫。

  • 回呼參數:normalModuleFactory

contextModuleFactory

SyncHook

在建立ContextModuleFactory之後執行外掛程式。

  • 回呼參數:contextModuleFactory

beforeCompile

AsyncSeriesHook

在建立編譯參數後執行外掛程式。

  • 回呼參數:compilationParams

compilationParams變數初始化如下

compilationParams = {
  normalModuleFactory,
  contextModuleFactory,
};

這個掛勾可用於新增/修改編譯參數

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

編譯

SyncHook

在建立新的編譯之前,在beforeCompile之後立即呼叫。這個掛勾不會複製到子編譯器。

  • 回呼參數:compilationParams

thisCompilation

SyncHook

在初始化編譯時執行,在發出編譯事件之前。這個掛勾不會複製到子編譯器。

  • 回呼參數:編譯編譯參數

編譯

SyncHook

在建立編譯後執行外掛程式。

  • 回呼參數:編譯編譯參數

make

AsyncParallelHook

在完成編譯前執行。此掛勾不會複製到子編譯器。

  • 回呼參數:編譯

afterCompile

AsyncSeriesHook

在完成並封裝編譯後呼叫。

  • 回呼參數:編譯

shouldEmit

SyncBailHook

在發出資產前呼叫。應傳回布林值,表示是否發出。

  • 回呼參數:編譯
compiler.hooks.shouldEmit.tap('MyPlugin', (compilation) => {
  // return true to emit the output, otherwise false
  return true;
});

emit

AsyncSeriesHook

在發出資產至輸出目錄前執行。此掛勾不會複製到子編譯器。

  • 回呼參數:編譯

afterEmit

AsyncSeriesHook

在發出資產至輸出目錄後呼叫。此掛勾不會複製到子編譯器。

  • 回呼參數:編譯

assetEmitted

AsyncSeriesHook

在發出資產時執行。提供對已發出資產的資訊存取,例如其輸出路徑和位元組內容。

  • 回呼參數:檔案資訊

例如,您可以透過 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

在編譯完成時執行。此掛勾不會複製到子編譯器。

  • 回呼參數:統計資料

additionalPass

AsyncSeriesHook

此掛勾讓您執行額外的建置步驟。

failed

SyncHook

如果編譯失敗,則呼叫。

  • 回呼參數:錯誤

invalid

SyncHook

當監控編譯失效時執行。此掛勾不會複製到子編譯器。

  • 回呼參數:fileNamechangeTime

watchClose

SyncHook

當監控編譯停止時呼叫。

shutdown

AsyncSeriesHook

當編譯器關閉時呼叫。

infrastructureLog

SyncBailHook

當透過 infrastructureLogging 選項 在組態中啟用基礎架構記錄時,允許使用基礎架構記錄。

  • 回呼參數:nametypeargs

log

SyncBailHook

當啟用時,允許記錄到 統計資料,請參閱 stats.loggingstats.loggingDebugstats.loggingTrace 選項

  • 回呼參數:originlogEntry

8 貢獻者

rishantagarwalbyzykmadhavarshneymisterdevEugeneHlushkosuperburritochenxsansnitin315