Compiler
模組是建立編譯實例的主要引擎,其中包含所有透過 CLI 或 Node API 傳遞的選項。它延伸 Tapable
類別以註冊和呼叫外掛。大多數面向使用者的外掛會先在 Compiler
上註冊。
在為 webpack 開發外掛時,您可能想知道每個掛鉤的呼叫位置。若要了解這一點,請在 webpack 來源中搜尋 hooks.<hook name>.call
。
Compiler
支援 監控,它會監控檔案系統並在檔案變更時重新編譯。在監控模式下,編譯器會發出其他事件,例如 watchRun
、watchClose
和 invalid
。這通常用於 開發 中,通常在 webpack-dev-server
等工具的幕後進行,這樣開發人員就不需要每次都手動重新編譯。也可以透過 CLI 進入監控模式。
下列生命週期 Hooks 由 compiler
公開,且可以如此存取
compiler.hooks.someHook.tap('MyPlugin', (params) => {
/* ... */
});
根據 Hook 類型,tapAsync
和 tapPromise
也可能可用。
有關 Hook 類型的說明,請參閱 Tapable 文件。
SyncHook
在準備編譯器環境時呼叫,緊接在組態檔中初始化外掛之後。
SyncHook
在 environment
Hook 之後呼叫,當編譯器環境設定完成時。
SyncBailHook
在 webpack 選項中的 entry
組態 已處理完畢後呼叫。
compiler.hooks.entryOption.tap('MyPlugin', (context, entry) => {
/* ... */
});
SyncHook
在設定一組初始內部外掛後呼叫。
compiler
SyncHook
在解析器設定完成後觸發。
compiler
SyncHook
在編譯器物件初始化時呼叫。
AsyncSeriesHook
在執行編譯器之前新增一個掛勾。
compiler
AsyncSeriesHook
在編譯器開始讀取記錄
之前掛入編譯器。
compiler
AsyncSeriesHook
在觸發新的編譯後,但在實際開始編譯之前,在監控模式期間執行外掛程式。
compiler
SyncHook
在建立NormalModuleFactory之後呼叫。
normalModuleFactory
SyncHook
在建立ContextModuleFactory之後執行外掛程式。
contextModuleFactory
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
SyncHook
在初始化編譯時執行,在發出編譯
事件之前。這個掛勾不會複製到子編譯器。
編譯
、編譯參數
SyncHook
在建立編譯後執行外掛程式。
編譯
、編譯參數
AsyncParallelHook
在完成編譯前執行。此掛勾不會複製到子編譯器。
編譯
AsyncSeriesHook
在完成並封裝編譯後呼叫。
編譯
SyncBailHook
在發出資產前呼叫。應傳回布林值,表示是否發出。
編譯
compiler.hooks.shouldEmit.tap('MyPlugin', (compilation) => {
// return true to emit the output, otherwise false
return true;
});
AsyncSeriesHook
在發出資產至輸出目錄前執行。此掛勾不會複製到子編譯器。
編譯
AsyncSeriesHook
在發出資產至輸出目錄後呼叫。此掛勾不會複製到子編譯器。
編譯
AsyncSeriesHook
在發出資產時執行。提供對已發出資產的資訊存取,例如其輸出路徑和位元組內容。
檔案
、資訊
例如,您可以透過 info.content
存取資產的內容緩衝區
compiler.hooks.assetEmitted.tap(
'MyPlugin',
(file, { content, source, outputPath, compilation, targetPath }) => {
console.log(content); // <Buffer 66 6f 6f 62 61 72>
}
);
AsyncSeriesHook
在編譯完成時執行。此掛勾不會複製到子編譯器。
統計資料
AsyncSeriesHook
此掛勾讓您執行額外的建置步驟。
SyncHook
如果編譯失敗,則呼叫。
錯誤
SyncHook
當監控編譯失效時執行。此掛勾不會複製到子編譯器。
fileName
、changeTime
SyncHook
當監控編譯停止時呼叫。
AsyncSeriesHook
當編譯器關閉時呼叫。
SyncBailHook
當透過 infrastructureLogging
選項 在組態中啟用基礎架構記錄時,允許使用基礎架構記錄。
name
、type
、args
SyncBailHook
當啟用時,允許記錄到 統計資料,請參閱 stats.logging
、stats.loggingDebug
和 stats.loggingTrace
選項。
origin
、logEntry