リゾルバーは、enhanced-resolve パッケージを使用して作成されます。Resolver クラスは tapable クラスを拡張し、いくつかのフックを提供するために tapable を使用します。enhanced-resolve パッケージは、新しいリゾルバーを作成するために直接使用できますが、compiler インスタンスには、活用できるいくつかのリゾルバーインスタンスがあります。
読み進める前に、enhanced-resolve と tapable のドキュメントに目を通してください。
compiler クラスで利用可能な組み込みリゾルバーには3つの型があります。
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]は上記の3つのリゾルバーのいずれかです。
フックとその説明の完全なリストについては、enhanced-resolve のドキュメントを参照してください。
上記のリゾルバーは、resolve または resolveLoader オプションを使用して、構成ファイルを通じてカスタマイズすることもできます。これらのオプションを使用すると、ユーザーは、resolve pluginsを含め、さまざまなオプションを通じて解決の動作を変更できます。
リゾルバープラグイン(例:DirectoryNamedPlugin)は、plugins構成オプションで直接使用するのではなく、resolve.pluginsに直接含めることができます。