NormalModuleFactory

NormalModuleFactoryは、コンパイラによってモジュール(NormalModule)を生成するために使用されます。各エントリモジュール(entry)から開始し、モジュールの依存関係要求を解決して、依存関係の最終的なパスを取得します。これらの最終的なパスに基づいて、NormalModuleインスタンスを作成します。その後、新しく作成されたモジュールの依存関係要求をさらに解決します。このプロセスは再帰的であり、NormalModuleFactoryを通じて各モジュールをNormalModuleとして作成します。

NormalModuleFactoryは、以下のライフサイクルフックを提供します。これらはCompilerフックと同様に使用できます。

NormalModuleFactory.hooks.someHook.tap(/* ... */);

すべてのフックはTapableを継承します。tap()に加えて、フックの種類に応じてtapAsync()tapPromise()も使用できます。

beforeResolve

AsyncSeriesBailHook<[ResolveData]>

新しい依存関係要求が検出されたときに呼び出されます。falseを返すことで、依存関係を無視できます。それ以外の場合は、続行するためにundefinedを返す必要があります。

beforeResolveフックは、モジュール解決プロセスのまさに最初に呼び出され、解決が行われる前にモジュールの要求情報をインターセプトして変更することができます。このフックを使用して、特定のモジュールの解決を前処理、フィルタリング、またはブロックできます。

compiler.hooks.compilation.tap(
  'MyPlugin',
  (compilation, { normalModuleFactory }) => {
    normalModuleFactory.hooks.beforeResolve.tap('MyPlugin', resolveData => {
      // access and modify module request information
      console.log(JSON.stringify(resolveData, null, 2));
    });
  },
);

factorize

AsyncSeriesBailHook<[ResolveData]>

解決を開始する前に呼び出されます。続行するにはundefinedを返す必要があります。

factorizeフックは、モジュールがインスタンス化される前にカスタムロジックを追加し、モジュール作成プロセスを変更するために使用されます。

compiler.hooks.compilation.tap(
  'MyPlugin',
  (compilation, { normalModuleFactory }) => {
    normalModuleFactory.hooks.factorize.tap('MyPlugin', resolveData => {
      // access and modify module request information
      console.log(JSON.stringify(resolveData, null, 2));
    });
  },
);
警告

現時点では、モジュールインスタンスの返却はサポートされていません。このフックはモジュール作成プロセスに影響を与えるため、注意して使用してください。

resolve

AsyncSeriesBailHook<[ResolveData]>

要求が解決される前に呼び出され、続行するにはundefinedを返す必要があります。resolveフックは、モジュール解決が開始される前にモジュール要求情報をインターセプトして変更するために使用できます。このフックにより、モジュール要求の前処理が可能です。

compiler.hooks.compilation.tap(
  'MyPlugin',
  (compilation, { normalModuleFactory }) => {
    normalModuleFactory.hooks.resolve.tap('MyPlugin', resolveData => {
      // access and modify module request information
      console.log(JSON.stringify(resolveData, null, 2));
    });
  },
);
警告

現時点では、モジュールインスタンスまたはfalseの返却はサポートされていません。

afterResolve

AsyncSeriesBailHook<[ResolveData]>

要求が解決された後に呼び出されます。

afterResolveフックは、モジュールが解決された後に結果をさらに処理または変更するために使用されます。これはモジュール解決プロセスの最後に呼び出されるため、この段階ではモジュールのパス、要求情報などは既に決定されています。

compiler.hooks.compilation.tap(
  'MyPlugin',
  (compilation, { normalModuleFactory }) => {
    normalModuleFactory.hooks.afterResolve.tap('MyPlugin', resolveData => {
      // access and modify the resolved module information
      console.log(JSON.stringify(resolveData, null, 2));
    });
  },
);

resolveForScheme

AsyncSeriesBailHook<[ResourceDataWithData]>

スキーマ(URI)付きの要求が解決される前に呼び出されます。

resolveForSchemeは、通常、file://https://などの特定のプロトコルを持つモジュール要求を処理するために使用されます。

compiler.hooks.compilation.tap(
  'MyPlugin',
  (compilation, { normalModuleFactory }) => {
    normalModuleFactory.hooks.resolveForScheme.tap('MyPlugin', resourceData => {
      console.log(JSON.stringify(resourceData, null, 2));
    });
  },
);