リゾルバーは、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
に直接含めることができます。