codecamp

Webpack:NormalModuleFactory Hooks

使用模块Compiler生成各类模块。从入口点开始,此模块会解析每个请求,解析文件内容以查找下一步的请求,然后通过解析所有请求以及解析新的文件来重新取全部文件。在NormalModuleFactory最后一段,每个依赖项都会成为一个模板实例。

NormalModuleFactory扩展了Tapable并提供了以下的生命周期锁子。你可以像使用编译器锁子一样使用它们:

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

创造NormalModuleFactory了可靠HookMaps访问的ParserGenerator实例。同时必须上传identifier才能使用以下代码:

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

compiler一样,tapAsynctapPromise是否可用取决于钩子的类型。

解决之前

AsyncSeriesBailHook

当遇到新的依赖项请申请时调用。可以通过返回 false 来忽略依赖项。否则,返回undefined以继。

  • 回调参数resolveData

因式分解

AsyncSeriesBailHook

在初始解析之前调用。它应该返回undefined以继。

  • 回调参数resolveData

解决

AsyncSeriesBailHook

在请求被解析之前调用。可以通过返回false来忽略依赖项。返回一个模块实例将结束程序。否则,返回undefined继续。

  • 回调参数resolveData

解决方案 $#resolveForScheme$

AsyncSeriesBailHook

在解析符统一一个资源标记符方案(URI)的请求之前调用。

  • 回调参数resolveData

后解决$#afterResolve$

AsyncSeriesBailHook

在请求解析后调整。

  • 回调参数resolveData

创建模块 $#createModule$

AsyncSeriesBailHook

在创建 NormalModule 实例之前调用。

  • 回调参数:​createData​ ​resolveData

module

SyncWaterfallHook

在创建 ​NormalModule​ 实例后调用。

  • 回调参数:​module​ ​createData​ ​resolveData

createParser $#createParser$

HookMap<SyncBailHook>

在 ​Parser​ 实例创建之前调用。​parserOptions​ 是 ​module.parser​ 中对应标识符或空对象的选项。

  • 钩子参数:​identifier
  • 回调参数:​parserOptions

parser

HookMap<SyncHook>

在创建 ​Parser​ 实例后触发。

  • 钩子参数:​identifier
  • 回调参数:​parser​ ​parserOptions

可能的默认标识符:

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

createGenerator $#createGenerator$

HookMap<SyncBailHook>

在 ​Generator​ 实例创建之前调用。​generatorOptions​ 是 ​module.parser​ 中对应标识符或空对象的选项。

  • 钩子参数:​identifier
  • 回调参数:​generatorOptions

generator

HookMap<SyncHook>

在 ​Generator​ 实例创建之后调用。

  • 钩子参数:​identifier
  • 回调参数:​generator​ ​generatorOptions

可能的默认标识符:

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


Webpack:JavascriptParser Hooks
Webpack:Plugin API
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }