このセクションの内容は、以下のリンクの内容を元に作成されており、CC BY 4.0 ライセンスの対象となります。
特に明記されていない限り、以下の内容は元のコンテンツに基づいて修正および削除が行われた結果とみなすことができます。
ほとんどのユーザーにとって、SplitChunksPlugin
はすぐに使用できます。
デフォルトでは、オンデマンドチャンクのみに影響します。初期チャンクを変更すると、プロジェクトを実行するためにHTMLファイルに含める必要があるスクリプトタグに影響するためです。
Rspack は以下の条件に基づいてチャンクを自動的に分割します。
最後の2つの条件を満たそうとするときに、より大きなチャンクが優先されます。
Rspack は、この機能をより詳細に制御したい開発者向けに、一連のオプションを提供しています。
デフォルトの設定は、Web パフォーマンスのベストプラクティスに適合するように選択されていますが、プロジェクトに最適な戦略は異なる場合があります。設定を変更する場合は、変更の影響を測定して、実際のメリットがあることを確認する必要があります。
この設定オブジェクトは、SplitChunksPlugin
のデフォルトの動作を表します。
ファイルパスが Rspack によって処理されると、UNIX システムでは常に/
、Windows システムでは常に\
が含まれます。そのため、パスセパレーターを表すには、{cacheGroup}.test
フィールドで[\\/]
を使用する必要があります。{cacheGroup}.test
内の/
または\
は、クロスプラットフォームで使用すると問題が発生します。
{cacheGroup}.test
にエントリ名を渡し、既存のチャンクの名前を{cacheGroup}.name
に使用することは、もはや許可されていません。
キャッシュグループは、splitChunks.{cacheGroup}.*
からのオプションを継承および/またはオーバーライドできますが、test
、priority
、およびreuseExistingChunk
は、キャッシュグループレベルでのみ設定できます。デフォルトのキャッシュグループを無効にするには、それらをfalse
に設定します。
'initial' | 'all' | 'async' | RegExp | ((chunk: Chunk) => bool)
'async'
これは、最適化の対象となるチャンクを示します。
文字列が指定されている場合、有効な値はall
、async
、およびinitial
です。all
を指定すると、非同期チャンクと非非同期チャンクの間でもチャンクを共有できるため、特に強力です。
または、より詳細な制御のために関数を使用することもできます。戻り値は、各チャンクを含めるかどうかを示します。
正規表現を渡すこともできます。これは(chunk) => regex.test(chunk.name)
の略記です。
number
30
オンデマンドロード時の最大並列リクエスト数。
number
30
エントリポイントでの最大並列リクエスト数。
number
1
分割する前に、モジュールをチャンク間で共有する必要がある最小回数。
boolean
options.mode
が'production'
の場合はtrue
、それ以外の場合はfalse
。maxSize
によって分割されたパーツの名前を作成する際に、パス情報を公開しないようにします。
number | Record<string, number>
20000
、それ以外の環境では10000
生成されるチャンクの最小サイズ (バイト)。
number | Record<string, number> = 0
maxSize
(グローバルなoptimization.splitChunks.maxSize
、キャッシュグループごとのoptimization.splitChunks.cacheGroups[x].maxSize
、またはフォールバックキャッシュグループのoptimization.splitChunks.fallbackCacheGroup.maxSize
のいずれか)を使用すると、Rspack はmaxSize
バイトより大きいチャンクをより小さなパーツに分割しようとします。パーツのサイズは少なくともminSize
(maxSize
の隣)になります。アルゴリズムは決定論的であり、モジュールの変更はローカルな影響しかありません。そのため、長期キャッシングで使用でき、レコードは必要ありません。maxSize
はヒントに過ぎず、モジュールがmaxSize
より大きい場合、または分割によってminSize
に違反する場合には、違反される可能性があります。
チャンクに既に名前がある場合、各パーツにはその名前から派生した新しい名前が付けられます。optimization.splitChunks.hidePathInfo
の値に応じて、最初のモジュール名から派生したキーまたはそのハッシュを追加します。
maxSize
オプションは、HTTP/2と長期キャッシングで使用することを目的としています。リクエスト数を増やすことで、より良いキャッシングを実現します。また、ファイルサイズを小さくすることで、より高速な再構築を実現することもできます。
maxSize
はmaxInitialRequest/maxAsyncRequests
よりも優先順位が高くなります。実際の優先順位はmaxInitialRequest/maxAsyncRequests < maxSize < minSize
です。
maxSize
の値を設定すると、maxAsyncSize
とmaxInitialSize
の両方の値が設定されます。
number | Record<string, number>
maxSize
と同様に、maxAsyncSize
はグローバル(splitChunks.maxAsyncSize
)、キャッシュグループ(splitChunks.cacheGroups.{cacheGroup}.maxAsyncSize
)、またはフォールバックキャッシュグループ(splitChunks.fallbackCacheGroup.maxAsyncSize
)に適用できます。
maxAsyncSize
とmaxSize
の違いは、maxAsyncSize
はオンデマンドロードチャンクのみに影響することです。
number | Record<string, number>
maxSize
と同様に、maxInitialSize
はグローバル(splitChunks.maxInitialSize
)、キャッシュグループ(splitChunks.cacheGroups.{cacheGroup}.maxInitialSize
)、またはフォールバックキャッシュグループ(splitChunks.fallbackCacheGroup.maxInitialSize
)に適用できます。
maxInitialSize
とmaxSize
の違いは、maxInitialSize
は初期ロードチャンクのみに影響することです。
string
-
デフォルトでは、Rspack はチャンクの起源と名前を使用して名前を生成します(例: vendors-main.js)。
このオプションを使用すると、生成された名前で使用されるデリミターを指定できます。
string | function
false
関数タイプのバージョンが
>=0.4.1
の場合。
各cacheGroupでも使用可能: splitChunks.cacheGroups.{cacheGroup}.name
。
分割チャンクの名前。false
を指定すると、チャンクの同じ名前が維持されるため、名前が不要に変更されることはありません。本番ビルドには推奨値です。
文字列を指定すると、カスタム名を使用できます。文字列を指定すると、すべての共通モジュールとベンダーが単一のチャンクにマージされます。これにより、初期ダウンロードサイズが大きくなり、ページの読み込み速度が低下する可能性があります。
splitChunks.name
がエントリポイント名と一致する場合、エントリポイントは削除されます。
splitChunks.cacheGroups.{cacheGroup}.name
を使用して、モジュールをソースチャンクの親であるチャンクに移動できます。たとえば、name: "entry-name"
を使用して、モジュールをentry-name
チャンクに移動します。オンデマンドの名前付きチャンクも使用できますが、選択したモジュールがそのチャンクでのみ使用されるように注意する必要があります。
boolean
この設定を有効にすると、チャンクの分割は、異なるランタイムでのモジュールエクスポートの使用状況に基づいてグループ化され、各ランタイムでの最適なロードサイズが確保されます。
たとえば、foo
、bar
、baz
という名前の3つのエントリポイントがあり、すべてshared
という同じモジュールに依存しているとします。ただし、foo
とbar
はshared
からのエクスポートvalue1
に依存し、baz
はshared
からのエクスポートvalue2
に依存しています。
デフォルトの戦略では、shared
モジュールは3つのチャンクに表示されます。分割のminSizeを満たす場合、shared
モジュールは別のチャンクに抽出する必要があります。
しかし、これでは、3つのエントリポイントのいずれにも最適なロードサイズが得られません。foo
とbar
のエントリからshared
モジュールをロードすると、エクスポートvalue2
が不要にロードされ、baz
のエントリからロードすると、エクスポートvalue1
が不要にロードされます。
splitChunks.usedExports
最適化を有効にすると、shared
モジュールのどのエクスポートが異なるエントリで使用されているかを分析します。これにより、foo
とbar
で使用されているエクスポートはbaz
で使用されているエクスポートとは異なることが判明し、foo
とbar
のエントリに対応する1つと、baz
のエントリに対応するもう1つの、2つの異なるチャンクが作成されます。
string[]
数値がサイズに使用されている場合に使用されるサイズの種類を設定します。
キャッシュグループは、splitChunks.*
からのオプションを継承および/または上書きできます。ただし、test
、priority
、reuseExistingChunk
は、キャッシュグループレベルでのみ設定できます。デフォルトのキャッシュグループを無効にするには、false
に設定します。
number
-20
モジュールは複数のキャッシュグループに属することができます。最適化は、より高いpriority
を持つキャッシュグループを優先します。デフォルトのグループは負の優先度を持ち、カスタムグループがより高い優先度を持つことを可能にします(カスタムグループのデフォルト値は0
です)。
RegExp | string | function
関数タイプのバージョンが
>=0.4.1
の場合。
このキャッシュグループによって選択されるモジュールを制御します。省略すると、すべてのモジュールが選択されます。絶対モジュールリソースパスまたはチャンク名と一致させることができます。チャンク名が一致すると、チャンク内のすべてのモジュールが選択されます。
boolean
Rspackに対し、splitChunks.minSize
、splitChunks.minChunks
、splitChunks.maxAsyncRequests
、splitChunks.maxInitialRequests
オプションを無視し、このキャッシュグループのチャンクを常に作成するように指示します。
string
チャンクIDのヒントを設定します。チャンクのファイル名に追加されます。
string
初期チャンクの場合にのみ、ファイル名を上書きできます。output.filenameで使用可能なプレースホルダーはすべてここで使用できます。
boolean
false
可能な場合は既存のチャンクを再利用するかどうか。もしそうであれば、分割後、新しく作成されたチャンクに含まれるモジュールが元のチャンクとまったく同じ場合、元のチャンクが再利用され、新しいチャンクは生成されません。これは、チャンクの最終的なファイル名に影響を与える可能性があります。例:
チャンクFooとBarでは、cacheGroupの設定により、モジュールBはモジュールBのみを含む新しいチャンクに分割されます。この新しいチャンクは、それが含むモジュールの点でチャンクBarと同一であるため、チャンクBarを直接再利用できます。
reuseExistingChunkの設定がfalse
に設定されている場合、チャンクBarとFooのモジュールBは新しいチャンクに移動され、チャンクBarはモジュールを含まなくなるため、空のチャンクとして削除されます。
string | RegExp
モジュールタイプでモジュールをキャッシュグループに割り当てることができます。