解析器是使用 enhanced-resolve
库创建的。Resolver
类
拓展了 tapable
类,并使用 tapable
来提供了一些钩子。
enhanced-resolve
可以直接用于创建新的解析器,
但是,任何 compiler
实例 都有一些解析器实例,可以
被 tap
进去。
在继续阅读之前,请确保你已经读过
enhanced-resolve
和 tapable
文档。
在 compiler
类中,提供了三种类型的内置解析器:
normal
: 通过绝对或相对路径解析模块。context
: 在给定的上下文中解析模块。loader
: 解析 webpack loader。根据需要,任一个被使用在 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
documentation 以获得钩子的完整列表以及它们的介绍。
上述解析器也可以
利用 resolve
or resolveLoader
选项,通过配置文件进行定制。这些选项允许
用户可以通过多种选项来更改解析行为,包括
通过解析 plugins
。
解析器插件,例如:DirectoryNamedPlugin
,可以直接引入
在 resolve.plugins
,而不是直接在 plugins
configuration option 中使用。