解析器是使用 enhanced-resolve
包创建的。Resolver
类扩展了 tapable
类并使用 tapable
提供了几个钩子。enhanced-resolve
包可以直接用于创建新的解析器,但任何compiler
实例都带有一些可以利用的解析器实例。
在继续阅读之前,请务必查看enhanced-resolve
和tapable
文档。
compiler
类上提供了三种内置解析器
normal
:通过绝对或相对路径解析模块。context
:在给定上下文中解析模块。loader
:解析 webpack 加载器。根据需要,compiler
使用的任何内置解析器都可以通过插件进行自定义
compiler.resolverFactory.hooks.resolver
.for('[type]')
.tap('name', (resolver) => {
// you can tap into resolver.hooks now
resolver.hooks.result.tap('MyPlugin', (result) => {
return result;
});
});
其中 [type]
是上面提到的三种解析器之一。
有关钩子的完整列表及其描述,请参阅enhanced-resolve
文档。
上述解析器也可以通过配置文件中的resolve
或resolveLoader
选项进行自定义。这些选项允许用户通过各种选项(包括解析器 plugins
)来更改解析行为。
解析器插件,例如DirectoryNamedPlugin
,可以直接包含在 resolve.plugins
中,而不是直接在plugins
配置选项中使用。