リゾルバーとは、絶対パスでモジュールを特定するのに役立つライブラリです。モジュールは、別のモジュールからの依存関係として、次のように必要となる可能性があります。
import foo from 'path/to/module';
// or
require('path/to/module');依存関係モジュールは、アプリケーションコードまたはサードパーティライブラリからのものである可能性があります。リゾルバーは、webpackが、そのようなすべてのrequire/importステートメントのバンドルに含める必要があるモジュールコードを見つけるのに役立ちます。webpackは、モジュールをバンドルする際に、ファイルパスを解決するためにenhanced-resolveを使用します。
enhanced-resolveを使用して、webpackは3種類のファイルパスを解決できます
import '/home/me/file';
import 'C:\\Users\\me\\file';ファイルへの絶対パスがすでにわかっているため、それ以上の解決は必要ありません。
import '../src/file1';
import './file2';この場合、importまたはrequireが発生するソースファイルのディレクトリがコンテキストディレクトリと見なされます。import/requireで指定された相対パスは、このコンテキストパスに結合されて、モジュールの絶対パスが生成されます。
import 'module';
import 'module/lib/file';モジュールは、resolve.modulesで指定されたすべてのディレクトリ内で検索されます。 resolve.alias設定オプションを使用してエイリアスを作成することにより、元のモジュールパスを別のパスに置き換えることができます。
package.jsonファイルが含まれている場合、resolve.exportsFields設定オプションで指定されたフィールドが順番に検索され、package.jsonの最初のそのようなフィールドが、パッケージエクスポートガイドラインに従って、パッケージから利用可能なエクスポートを決定します。上記のルールに基づいてパスが解決されると、リゾルバーはパスがファイルまたはディレクトリを指しているかどうかを確認します。パスがファイルを指している場合
.js、.jsx)を伝えるresolve.extensionsオプションを使用して解決されます。パスがフォルダーを指している場合は、適切な拡張子を持つ適切なファイルを見つけるために、次の手順が実行されます
package.jsonファイルが含まれている場合、resolve.mainFields設定オプションで指定されたフィールドが順番に検索され、package.jsonの最初のそのようなフィールドがファイルパスを決定します。package.jsonがない場合、またはresolve.mainFieldsが有効なパスを返さない場合、インポート/必須ディレクトリに一致するファイル名が存在するかどうかを確認するために、resolve.mainFiles設定オプションで指定されたファイル名が順番に検索されます。resolve.extensionsオプションを使用して同様の方法で解決されます。webpackは、ビルドターゲットに応じて、これらのオプションに適切なデフォルトを提供します。
これは、ファイル解決に指定されたものと同じルールに従います。ただし、resolveLoader設定オプションを使用すると、ローダーに個別の解決ルールを設定できます。
すべてのファイルシステムアクセスはキャッシュされるため、同じファイルへの複数の並列またはシリアルリクエストがより高速に実行されます。監視モードでは、変更されたファイルのみがキャッシュから削除されます。監視モードがオフの場合、コンパイルごとにキャッシュがパージされます。
上記の構成オプションの詳細については、Resolve APIを参照してください。