
There are three types of resolvers, each used for different types of modules:
compiler.resolvers.normal: Resolve a normal module.compiler.resolvers.context: Resolve a context module.compiler.resolvers.loader: Resolve a loader.Any plugin should use this.fileSystem as fileSystem, as it's cached. It only has async named functions, but they may behave sync, if the user uses a sync file system implementation (i. e. in enhanced-require).
To join paths any plugin should use this.join. It normalizes the paths. There is a this.normalize too.
A bailing async forEach implementation is available on this.forEachBail(array, iterator, callback).
To pass the request to other resolving plugins, use the this.doResolve(types: String|String[], request: Request, message: String, callback) method. types are multiple possible request types that are tested in order of preference.
interface Request {
path: String // The current directory of the request
request: String // The current request string
query: String // The query string of the request, if any
module: boolean // The request begins with a module
directory: boolean // The request points to a directory
file: boolean // The request points to a file
resolved: boolean // The request is resolved/done
// undefined means false for boolean fields
}
// Examples
// from /home/user/project/file.js: require("../test?charset=ascii")
{
path: "/home/user/project",
request: "../test",
query: "?charset=ascii"
}
// from /home/user/project/file.js: require("test/test/")
{
path: "/home/user/project",
request: "test/test/",
module: true,
directory: true
}
resolve(context: String, request: String)Before the resolving process starts.
resolve-step(types: String[], request: Request)Before a single step in the resolving process starts.
module(request: Request) async waterfallA module request is found and should be resolved.
directory(request: Request) async waterfallA directory request is found and should be resolved.
file(request: Request) async waterfallA file request is found and should be resolved.
Here is a list what the default plugins in webpack offer. They are all (request: Request) async waterfall.
The process for normal modules and contexts is module -> module-module -> directory -> file.
The process for loaders is module -> module-loader-module -> module-module -> directory -> file.
module-moduleA module should be looked up in a specified directory. path contains the directory.
module-loader-module (only for loaders)Used before module templates are applied to the module name. The process continues with module-module.