`NormalModuleFactory` 模块由 `Compiler` 使用来生成模块。它从入口点开始,解析每个请求,解析内容以查找进一步的请求,并通过解析所有新文件并解析任何新文件来持续遍历文件。在最后阶段,每个依赖都成为一个 Module 实例。
`NormalModuleFactory` 类扩展了 `Tapable`,并提供了以下生命周期钩子。它们可以像编译器钩子一样被绑定。
NormalModuleFactory.hooks.someHook.tap(/* ... */);
NormalModuleFactory 创建 `Parser` 和 `Generator` 实例,这些实例可以通过 HookMaps 访问。必须传入标识符才能绑定到这些钩子。
NormalModuleFactory.hooks.someHook.for('identifier').tap(/* ... */);
与编译器一样,tapAsync
和 tapPromise
也可能可用,具体取决于钩子的类型。
AsyncSeriesBailHook
当遇到新的依赖请求时调用。返回 `false` 可以忽略一个依赖。否则,它应该返回 `undefined` 以继续。
AsyncSeriesBailHook
在启动解析前调用。它应该返回 `undefined` 以继续。
AsyncSeriesBailHook
在请求解析前调用。返回 `false` 可以忽略一个依赖。返回一个 Module 实例将结束该过程。否则,它应该返回 `undefined` 以继续。
AsyncSeriesBailHook
在带有 scheme (URI) 的请求被解析前调用。
AsyncSeriesBailHook
在请求解析后调用。
AsyncSeriesBailHook
在 `NormalModule` 实例创建前调用。
HookMap<SyncBailHook>
一个钩子,允许你在创建模块时覆盖 `NormalModule` 类。此钩子在 createModule
钩子之后,module
钩子之前调用。
钩子参数: identifier
回调参数:`createData` `resolveData`
SyncWaterfallHook
在 `NormalModule` 实例创建后调用。
HookMap<SyncBailHook>
在 `Parser` 实例创建前调用。`parserOptions` 是 module.parser 中对应标识符的选项,或者是一个空对象。
钩子参数: identifier
回调参数:`parserOptions`
HookMap<SyncHook>
在 `Parser` 实例创建后触发。
钩子参数: identifier
回调参数:`parser` `parserOptions`
可能的默认标识符
javascript/auto
javascript/dynamic
javascript/esm
JSON
webassembly/sync
webassembly/async
资产
HookMap<SyncBailHook>
在 `Generator` 实例创建前调用。`generatorOptions` 是 module.generator 中对应标识符的选项,或者是一个空对象。
钩子参数: identifier
回调参数:`generatorOptions`
HookMap<SyncHook>
在 `Generator` 实例创建后调用。
钩子参数: identifier
回调参数:`generator` `generatorOptions`
可能的默认标识符
JSON
webassembly/sync
webassembly/async
资产
asset/source
asset/resource
asset/inline