ChunkSplit
{ strategy: 'split-by-experience' }
performance.chunkSplit
configures the chunk splitting strategy. The type definition for ChunkSplit
:
See the Code Splitting guide for detailed usage.
Rsbuild supports the following chunk splitting strategies:
The complete type definition for performance.chunkSplit
:
type ForceSplitting = RegExp[] | Record<string, RegExp>;
interface BaseChunkSplit {
strategy?:
| 'split-by-module'
| 'split-by-experience'
| 'all-in-one'
| 'single-vendor';
override?: Rspack.OptimizationSplitChunksOptions;
forceSplitting?: ForceSplitting;
}
interface SplitBySize extends BaseSplitRules {
strategy: 'split-by-size';
minSize?: number;
maxSize?: number;
}
interface SplitCustom extends BaseSplitRules {
strategy: 'custom';
splitChunks?: SplitChunks;
}
type ChunkSplit = BaseChunkSplit | SplitBySize | SplitCustom;
By default, Rsbuild uses the split-by-experience
strategy. To use other chunk splitting strategies, specify them through the strategy
option, for example:
export default {
performance: {
chunkSplit: {
strategy: 'all-in-one',
},
},
};
number
10000
When chunkSplit.strategy
is split-by-size
, you can specify the minimum size of a chunk via chunkSplit.minSize
, the unit is bytes. The default value is 10000
. For example:
export default {
performance: {
chunkSplit: {
strategy: 'split-by-size',
minSize: 20000,
},
},
};
number
Number.POSITIVE_INFINITY
When chunkSplit.strategy
is split-by-size
, you can specify the maximum size of a chunk via chunkSplit.maxSize
, the unit is bytes. The default value is Number.POSITIVE_INFINITY
. For example:
export default {
performance: {
chunkSplit: {
strategy: 'split-by-size',
maxSize: 50000,
},
},
};
RegExp[] | Record<string, RegExp>
[]
Via chunkSplit.forceSplitting
, you can specify the npm packages that need to be forced to split.
For example, split the axios
library under node_modules into axios.js
:
export default {
performance: {
chunkSplit: {
forceSplitting: {
axios: /node_modules[\\/]axios/,
},
},
},
};
This is an easier way than configuring Rspack's splitChunks directly.
Chunks split using the forceSplitting
configuration will be inserted into the HTML file as resources requested for the initial screen using <script>
tags. Therefore, please split them appropriately based on the actual scenario to avoid excessive size of initial screen resources.
When chunkSplit.strategy
is custom
, you can specify the custom Rspack chunk splitting config via chunkSplit.splitChunks
. This config will be merged with the Rspack splitChunks config (the cacheGroups
config will also be merged). For example:
export default {
performance: {
chunkSplit: {
strategy: 'custom',
splitChunks: {
cacheGroups: {
react: {
test: /node_modules[\\/](react|react-dom)[\\/]/,
name: 'react',
chunks: 'all',
},
},
},
},
},
};
When chunkSplit.strategy
is split-by-experience
, split-by-module
, split-by-size
or single-vendor
, you can specify the custom Rspack chunk splitting config via chunkSplit.override
. This config will be merged with the Rspack splitChunks config (the cacheGroups
config will also be merged). For example:
export default {
performance: {
chunkSplit: {
override: {
cacheGroups: {
react: {
test: /node_modules[\\/](react|react-dom)[\\/]/,
name: 'react',
chunks: 'all',
},
},
},
},
},
};
performance.chunkSplit
only works when output.target is web
. This means that when output.target
is node
or web-worker
, performance.chunkSplit
will not take effect.
Typically, Node bundles do not need to be split to optimize loading performance, if you need to split Node bundles, you can use the tools.rspack configuration to configure Rspack's optimization.splitChunks option:
export default {
tools: {
rspack: {
optimization: {
splitChunks: {
// options
},
},
},
},
};