パッケージバンドルを最適化する方法
外部パッケージをバンドルすると、アプリケーションのパフォーマンスが大幅に向上する可能性があります。 デフォルトでは、アプリケーションにインポートされたパッケージはバンドルされません。これによりパフォーマンスに影響が出る場合や、外部パッケージが事前にバンドルされていない場合(例:モノレポやnode_modulesからインポートされた場合)に正しく動作しない可能性があります。このページでは、パッケージバンドルを分析し設定する方法を説明します。
JavaScriptバンドルの分析
@next/bundle-analyzerは、アプリケーションバンドルのサイズ管理に役立つNext.jsのプラグインです。各パッケージとその依存関係のサイズを視覚的にレポートします。この情報を使用して、大きな依存関係を削除したり、コードを分割したり、遅延ロードしたりできます。
インストール
次のコマンドを実行してプラグインをインストールします。
npm i @next/bundle-analyzer
# or
yarn add @next/bundle-analyzer
# or
pnpm add @next/bundle-analyzer次に、バンドルアナライザーの設定をnext.config.jsに追加します。
/** @type {import('next').NextConfig} */
const nextConfig = {}
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
})
module.exports = withBundleAnalyzer(nextConfig)レポートの生成
次のコマンドを実行してバンドルを分析します。
ANALYZE=true npm run build
# or
ANALYZE=true yarn build
# or
ANALYZE=true pnpm buildレポートはブラウザに3つの新しいタブを開き、それらを検査できます。アプリケーションのバンドルを定期的に評価することで、時間の経過とともにアプリケーションのパフォーマンスを維持するのに役立ちます。
パッケージインポートの最適化
アイコンライブラリなどの一部のパッケージは、数百のモジュールをエクスポートでき、開発および本番環境でパフォーマンスの問題を引き起こす可能性があります。
next.config.jsにoptimizePackageImportsオプションを追加することで、これらのパッケージのインポート方法を最適化できます。このオプションは、実際に使用するモジュールのみをロードし、多数の名前付きエクスポートを含むインポートステートメントを記述する利便性を提供します。
/** @type {import('next').NextConfig} */
const nextConfig = {
experimental: {
optimizePackageImports: ['icon-library'],
},
}
module.exports = nextConfigNext.jsは一部のライブラリを自動的に最適化するため、optimizePackageImportsリストに含める必要はありません。 完全なリストを確認してください。
特定のパッケージのバンドル
特定のパッケージをバンドルするには、next.config.jsでtranspilePackagesオプションを使用できます。このオプションは、事前にバンドルされていない外部パッケージ(例:モノレポ内やnode_modulesからインポートされたパッケージ)をバンドルする場合に便利です。
/** @type {import('next').NextConfig} */
const nextConfig = {
transpilePackages: ['package-name'],
}
module.exports = nextConfigすべてのパッケージのバンドル
すべてのパッケージを自動的にバンドルするには(App Routerでのデフォルトの動作)、next.config.jsでbundlePagesRouterDependenciesオプションを使用できます。
/** @type {import('next').NextConfig} */
const nextConfig = {
bundlePagesRouterDependencies: true,
}
module.exports = nextConfigバンドルから特定のパッケージを除外する
bundlePagesRouterDependenciesオプションが有効になっている場合、next.config.jsのserverExternalPackagesオプションを使用して、自動バンドルから特定のパッケージを除外できます。
/** @type {import('next').NextConfig} */
const nextConfig = {
// Automatically bundle external packages in the Pages Router:
bundlePagesRouterDependencies: true,
// Opt specific packages out of bundling for both App and Pages Router:
serverExternalPackages: ['package-name'],
}
module.exports = nextConfig次のステップ
役に立ちましたか?