Resolvers 是使用 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
配置选项 中使用。