リゾルバーとは、絶対パスでモジュールを特定するのに役立つライブラリです。モジュールは、別のモジュールからの依存関係として、次のように必要となる可能性があります。
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を参照してください。