パッケージバンドリングの最適化方法
外部パッケージのバンドリングはアプリケーションのパフォーマンスを大幅に向上させることができます。 デフォルトでは、アプリケーションにインポートされたパッケージはバンドルされません。これはパフォーマンスに影響を与える可能性があり、例えばモノレポやnode_modules
からインポートされた外部パッケージが事前バンドルされていない場合、動作しない可能性があります。このページでは、パッケージバンドリングを分析し設定する方法を解説します。
JavaScriptバンドルの分析
@next/bundle-analyzer
はNext.jsのプラグインで、アプリケーションのバンドルサイズを管理するのに役立ちます。各パッケージとその依存関係のサイズを視覚的なレポートとして生成します。この情報を使用して大きな依存関係を削除したり、コードを分割したり、遅延読み込みしたりできます。
インストール
以下のコマンドを実行してプラグインをインストールします:
次に、バンドルアナライザーの設定をnext.config.js
に追加します。
レポートの生成
以下のコマンドを実行してバンドルを分析します:
レポートはブラウザで3つの新しいタブとして開かれ、調査できます。定期的にアプリケーションのバンドルを評価することで、アプリケーションのパフォーマンスを維持するのに役立ちます。
パッケージインポートの最適化
アイコンライブラリなどの一部のパッケージは数百のモジュールをエクスポートする可能性があり、開発環境や本番環境でパフォーマンスの問題を引き起こす可能性があります。
これらのパッケージのインポート方法を最適化するには、next.config.js
にoptimizePackageImports
オプションを追加します。このオプションは、実際に使用するモジュールのみをロードしつつ、多くの名前付きエクスポートを含むインポート文を書く便利さを維持します。
Next.jsはまた、いくつかのライブラリを自動的に最適化するため、それらはoptimizePackageImportsリストに含める必要はありません。完全なリストを参照してください。
特定パッケージのバンドリング
特定のパッケージをバンドルするには、next.config.js
でtranspilePackages
オプションを使用できます。このオプションは、モノレポ内やnode_modules
からインポートされた事前バンドルされていない外部パッケージをバンドルするのに便利です。
すべてのパッケージのバンドリング
すべてのパッケージを自動的にバンドルするには(App Routerでのデフォルト動作)、next.config.js
でbundlePagesRouterDependencies
オプションを使用できます。
特定パッケージのバンドリング除外
bundlePagesRouterDependencies
オプションが有効な場合、next.config.js
でserverExternalPackages
オプションを使用して特定のパッケージを自動バンドリングから除外できます: