Webpack:NormalModuleFactory Hooks

2023-05-31 11:17 更新

使用模塊Compiler生成各類模塊。從入口點(diǎn)開始,此模塊會(huì)解析每個(gè)請(qǐng)求,解析文件內(nèi)容以查找下一步的請(qǐng)求,然后通過解析所有請(qǐng)求以及解析新的文件來重新取全部文件。在NormalModuleFactory最后一段,每個(gè)依賴項(xiàng)都會(huì)成為一個(gè)模板實(shí)例。

NormalModuleFactory擴(kuò)展了Tapable并提供了以下的生命周期鎖子。你可以像使用編譯器鎖子一樣使用它們:

NormalModuleFactory.hooks.someHook.tap(/* ... */);

創(chuàng)造NormalModuleFactory了可靠HookMaps訪問的ParserGenerator實(shí)例。同時(shí)必須上傳identifier才能使用以下代碼:

NormalModuleFactory.hooks.someHook.for('identifier').tap(/* ... */);

compiler一樣,tapAsynctapPromise是否可用取決于鉤子的類型。

解決之前

AsyncSeriesBailHook

當(dāng)遇到新的依賴項(xiàng)請(qǐng)申請(qǐng)時(shí)調(diào)用??梢酝ㄟ^返回 false 來忽略依賴項(xiàng)。否則,返回undefined以繼。

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

因式分解

AsyncSeriesBailHook

在初始解析之前調(diào)用。它應(yīng)該返回undefined以繼。

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

解決

AsyncSeriesBailHook

在請(qǐng)求被解析之前調(diào)用。可以通過返回false來忽略依賴項(xiàng)。返回一個(gè)模塊實(shí)例將結(jié)束程序。否則,返回undefined繼續(xù)。

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

解決方案 $#resolveForScheme$

AsyncSeriesBailHook

在解析符統(tǒng)一一個(gè)資源標(biāo)記符方案(URI)的請(qǐng)求之前調(diào)用。

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

后解決$#afterResolve$

AsyncSeriesBailHook

在請(qǐng)求解析后調(diào)整。

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

創(chuàng)建模塊 $#createModule$

AsyncSeriesBailHook

在創(chuàng)建 NormalModule 實(shí)例之前調(diào)用。

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

module

SyncWaterfallHook

在創(chuàng)建 ?NormalModule? 實(shí)例后調(diào)用。

  • 回調(diào)參數(shù):?module? ?createData? ?resolveData?

createParser $#createParser$

HookMap<SyncBailHook>

在 ?Parser? 實(shí)例創(chuàng)建之前調(diào)用。?parserOptions? 是 ?module.parser? 中對(duì)應(yīng)標(biāo)識(shí)符或空對(duì)象的選項(xiàng)。

  • 鉤子參數(shù):?identifier?
  • 回調(diào)參數(shù):?parserOptions?

parser

HookMap<SyncHook>

在創(chuàng)建 ?Parser? 實(shí)例后觸發(fā)。

  • 鉤子參數(shù):?identifier?
  • 回調(diào)參數(shù):?parser? ?parserOptions?

可能的默認(rèn)標(biāo)識(shí)符:

  1. ?javascript/auto?
  2. ?javascript/dynamic?
  3. ?javascript/esm?
  4. ?json?
  5. ?webassembly/sync?
  6. ?webassembly/async?
  7. ?asset?

createGenerator $#createGenerator$

HookMap<SyncBailHook>

在 ?Generator? 實(shí)例創(chuàng)建之前調(diào)用。?generatorOptions? 是 ?module.parser? 中對(duì)應(yīng)標(biāo)識(shí)符或空對(duì)象的選項(xiàng)。

  • 鉤子參數(shù):?identifier?
  • 回調(diào)參數(shù):?generatorOptions?

generator

HookMap<SyncHook>

在 ?Generator? 實(shí)例創(chuàng)建之后調(diào)用。

  • 鉤子參數(shù):?identifier?
  • 回調(diào)參數(shù):?generator? ?generatorOptions?

可能的默認(rèn)標(biāo)識(shí)符:

  1. ?json?
  2. ?webassembly/sync?
  3. ?webassembly/async?
  4. ?asset?
  5. ?asset/source?
  6. ?asset/resource?
  7. ?asset/inline?


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)