阅读(88) (0)

Webpack:解析器(Resolvers)

2023-05-11 14:20:39 更新

解析器是使用 ​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]​ 是上述三个解析器之一。

配置选项

上述解析器也可以 利用 ​resolve​ 或者 ​resolveLoader​ 选项,通过配置文件进行定制。这些选项允许 用户可以通过多种选项来更改解析行为,包括 通过解析 ​plugins​。

解析器插件,例如:​DirectoryNamedPlugin​,可以直接引入 在 ​resolve.plugins​,而不是直接在 ​plugins configuration option​ 中使用。