Module not available for eager consumption

Alex O'Callaghan

Eager Consumption でモジュールが利用できない

原文は Alex O'Callaghan により に公開されました。 このブログを購読する

古いアプリケーションへの Module Federation の導入を進める中で、古いバージョンの Babel を使っているプロジェクトでいくつか問題が発生しました。

通常、bootstrap ファイルを追加することで、フェデレーテッドモジュールが使用される前に確実に読み込まれるようにできます。この手法については以前の記事で紹介しました。しかし、あるアプリケーションでは依然として次のエラーが発生していました:

Error: Shared module is not available for eager consumption: webpack/sharing/consume/default/react/react

チームは Webpack がバンドルの残りをコード分割できるように、dynamic import を使った bootstrap ファイルを追加していました。プロジェクトではすでに最新バージョンの @babel/preset-env を使用していたため、構文をサポートするための追加対応は不要なはずでした。

デバッグを進めた結果、Webpack がまったくコード分割を行っていないことがわかりました。原因は@babel/plugin-transform-dynamic-importimport() 式を変換してしまい、Webpack がコード分割に使えなくなっていたことにありました。このプラグインは @babel/preset-env を使用している場合は自動的に無効になるはずですが、今回はそうなっていませんでした。

@babel/preset-env でこのプラグインを無効化するには、次のように設定します:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "entry",
        "corejs": 3,
        "exclude": ["proposal-dynamic-import"]
      }
    ]
  ]
}

これにより Webpack がコード分割できるようになり、エラーは解消しました。ただし根本的な原因は、プロジェクトが [email protected] を使用していたことにありました。最新バージョンにアップグレードすることで、プラグインを明示的に無効化しなくても問題は解決しました。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント