Resolvers are created using the enhanced-resolve package. The Resolver
class extends the tapable class and uses tapable to provide a few hooks.
The enhanced-resolve package can be used directly to create new resolvers,
however any compiler instance has a few resolver instances that can be
tapped into.
Before reading on, make sure to have a look at the
enhanced-resolve and tapable documentation.
There are three types of built-in resolvers available on the compiler class:
normal: Resolves a module via an absolute or relative path.context: Resolves a module within a given context.loader: Resolves a webpack loader.Depending on need, any one of these built-in resolvers, that are used by the compiler,
can be customized via plugins:
compiler.resolverFactory.hooks.resolver
.for('[type]')
.tap('name', (resolver) => {
// you can tap into resolver.hooks now
resolver.hooks.result.tap('MyPlugin', (result) => {
return result;
});
});
Where [type] is one of the three resolvers mentioned above.
See the enhanced-resolve documentation for a full list of hooks and their description.
The resolvers mentioned above can also be customized via a configuration file
with the resolve or resolveLoader options. These options allow
users to change the resolving behavior through a variety of options including
through resolve plugins.
The resolver plugins, e.g. DirectoryNamedPlugin, can be included
directly in resolve.plugins rather than using directly in plugins configuration option.