W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
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
?。
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。
SyncHook
在編譯器準(zhǔn)備環(huán)境時調(diào)用,時機就在配置文件中初始化插件之后。
SyncHook
當(dāng)編譯器環(huán)境設(shè)置完成后,在 ?environment
? hook 后直接調(diào)用。
SyncBailHook
在 webpack 選項中的 entry 被處理過之后調(diào)用。
context
?, ?entry
?compiler.hooks.entryOption.tap('MyPlugin', (context, entry) => {
/* ... */
});
SyncHook
在初始化內(nèi)部插件集合完成設(shè)置之后調(diào)用。
SyncHook
resolver 設(shè)置完成之后觸發(fā)。
compiler
?SyncHook
當(dāng)編譯器對象被初始化時調(diào)用。
AsyncSeriesHook
在開始執(zhí)行一次構(gòu)建之前調(diào)用,compiler.run 方法開始執(zhí)行后立刻進行調(diào)用。
compiler
?AsyncSeriesHook
在開始讀取 records 之前調(diào)用。
compiler
?AsyncSeriesHook
在監(jiān)聽模式下,一個新的 compilation 觸發(fā)之后,但在 compilation 實際開始之前執(zhí)行。
compiler
?SyncHook
NormalModuleFactory 創(chuàng)建之后調(diào)用。
normalModuleFactory
?SyncHook
ContextModuleFactory 創(chuàng)建之后調(diào)用。
contextModuleFactory
?AsyncSeriesHook
在創(chuàng)建 compilation parameter 之后執(zhí)行。
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();
});
SyncHook
?beforeCompile
? 之后立即調(diào)用,但在一個新的 compilation 創(chuàng)建之前。這個鉤子 不會 被復(fù)制到子編譯器。
compilationParams
?SyncHook
初始化 compilation 時調(diào)用,在觸發(fā) ?compilation
? 事件之前調(diào)用。這個鉤子 不會 被復(fù)制到子編譯器。
compilation
?, ?compilationParams
?SyncHook
compilation 創(chuàng)建之后執(zhí)行。
compilation
?, ?compilationParams
?AsyncParallelHook
compilation 結(jié)束之前執(zhí)行。這個鉤子不會被復(fù)制到子編譯器。
compilation
?AsyncSeriesHook
compilation 結(jié)束和封印之后執(zhí)行。
compilation
?SyncBailHook
在輸出 asset 之前調(diào)用。返回一個布爾值,告知是否輸出。
compilation
?compiler.hooks.shouldEmit.tap('MyPlugin', (compilation) => {
// 返回 true 以輸出 output 結(jié)果,否則返回 false
return true;
});
AsyncSeriesHook
輸出 asset 到 output 目錄之前執(zhí)行。這個鉤子 不會 被復(fù)制到子編譯器。
compilation
?AsyncSeriesHook
輸出 asset 到 output 目錄之后執(zhí)行。這個鉤子 不會 被復(fù)制到子編譯器。
compilation
?AsyncSeriesHook
在 asset 被輸出時執(zhí)行。此鉤子可以訪問被輸出的 asset 的相關(guān)信息,例如它的輸出路徑和字節(jié)內(nèi)容。
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>
}
);
AsyncSeriesHook
在 compilation 完成時執(zhí)行。這個鉤子 不會 被復(fù)制到子編譯器。
stats
?AsyncSeriesHook
This hook allows you to do a one more additional pass of the build.
SyncHook
在 compilation 失敗時調(diào)用。
error
?SyncHook
在一個觀察中的 compilation 無效時執(zhí)行。這個鉤子 不會 被復(fù)制到子編譯器。
fileName
?, ?changeTime
?SyncHook
在一個觀察中的 compilation 停止時執(zhí)行。
AsyncSeriesHook
當(dāng)編譯器關(guān)閉時調(diào)用。
SyncBailHook
在配置中啟用 ?infrastructureLogging
? 選項 后,允許使用 infrastructure log(基礎(chǔ)日志)。
name
?, ?type
?, ?args
?SyncBailHook
啟用后允許記錄到 stats 對象,請參閱 stats.logging, stats.loggingDebug 和 stats.loggingTrace 選項。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: