1
1
import assert from 'node:assert' ;
2
2
import { NODE_MODULES_REGEX } from '../constants' ;
3
3
import type {
4
+ ChunkSplit ,
4
5
ForceSplitting ,
5
6
Polyfill ,
6
- RsbuildChunkSplit ,
7
7
RsbuildPlugin ,
8
8
Rspack ,
9
9
SplitChunks ,
@@ -32,7 +32,7 @@ interface SplitChunksContext {
32
32
/**
33
33
* User Rsbuild `chunkSplit` config
34
34
*/
35
- userConfig : RsbuildChunkSplit ;
35
+ userConfig : ChunkSplit ;
36
36
/**
37
37
* The root path of current project
38
38
*/
@@ -43,7 +43,10 @@ interface SplitChunksContext {
43
43
polyfill : Polyfill ;
44
44
}
45
45
46
- function getForceSplittingGroups ( forceSplitting : ForceSplitting ) : CacheGroups {
46
+ function getForceSplittingGroups (
47
+ forceSplitting : ForceSplitting ,
48
+ strategy : ChunkSplit [ 'strategy' ] ,
49
+ ) : CacheGroups {
47
50
const cacheGroups : CacheGroups = { } ;
48
51
const pairs = Array . isArray ( forceSplitting )
49
52
? forceSplitting . map (
@@ -56,7 +59,8 @@ function getForceSplittingGroups(forceSplitting: ForceSplitting): CacheGroups {
56
59
test : regexp ,
57
60
name : key ,
58
61
chunks : 'all' ,
59
- priority : 0 ,
62
+ // ensure force splitting chunks have higher priority when chunkSplit is 'single-vendor'
63
+ priority : strategy === 'single-vendor' ? 1 : 0 ,
60
64
// Ignore minimum size, minimum chunks and maximum requests and always create chunks.
61
65
enforce : true ,
62
66
} ;
@@ -263,6 +267,7 @@ export const pluginSplitChunks = (): RsbuildPlugin => ({
263
267
if ( chunkSplit . forceSplitting ) {
264
268
forceSplittingGroups = getForceSplittingGroups (
265
269
chunkSplit . forceSplitting ,
270
+ chunkSplit . strategy ,
266
271
) ;
267
272
}
268
273
0 commit comments