解析器(Resolvers)

解析器是使用 enhanced-resolve 库创建的。Resolver 类 拓展了 tapable 类,并使用 tapable 来提供了一些钩子。 enhanced-resolve 可以直接用于创建新的解析器, 但是,任何 compiler 实例 都有一些解析器实例,可以 被 tap 进去。

在继续阅读之前,请确保你已经读过 enhanced-resolvetapable 文档。

类型

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 中使用。