@@ -170,15 +170,22 @@ class Stats {
170
170
! forToString
171
171
) ;
172
172
const showChunks = optionOrLocalFallback ( options . chunks , ! forToString ) ;
173
- const showChunkModules = optionOrLocalFallback ( options . chunkModules , true ) ;
173
+ const showChunkModules = optionOrLocalFallback (
174
+ options . chunkModules ,
175
+ ! forToString
176
+ ) ;
177
+ const showChunkRootModules = optionOrLocalFallback (
178
+ options . chunkRootModules ,
179
+ forToString ? ! showChunkModules : true
180
+ ) ;
174
181
const showChunkOrigins = optionOrLocalFallback (
175
182
options . chunkOrigins ,
176
183
! forToString
177
184
) ;
178
185
const showModules = optionOrLocalFallback ( options . modules , true ) ;
179
186
const showNestedModules = optionOrLocalFallback (
180
187
options . nestedModules ,
181
- true
188
+ ! forToString
182
189
) ;
183
190
const showOrphanModules = optionOrLocalFallback (
184
191
options . orphanModules ,
@@ -793,6 +800,25 @@ class Stats {
793
800
) ;
794
801
}
795
802
}
803
+ if ( showChunkRootModules ) {
804
+ const rootModules = chunkGraph . getChunkRootModules ( chunk ) ;
805
+ obj . rootModules = rootModules
806
+ . slice ( )
807
+ . sort ( sortRealModules )
808
+ . filter ( createModuleFilter ( "root-of-chunk" ) )
809
+ . map ( m => fnModule ( m ) ) ;
810
+ obj . filteredRootModules = rootModules . length - obj . rootModules . length ;
811
+ obj . nonRootModules =
812
+ chunkGraph . getNumberOfChunkModules ( chunk ) - rootModules . length ;
813
+ if ( sortModules ) {
814
+ obj . rootModules . sort (
815
+ concatComparators (
816
+ sortByField ( sortModules ) ,
817
+ keepOriginalOrder ( obj . rootModules )
818
+ )
819
+ ) ;
820
+ }
821
+ }
796
822
if ( showChunkOrigins ) {
797
823
const originsKeySet = new Set ( ) ;
798
824
obj . origins = Array . from ( chunk . groupsIterable , g => g . origins )
@@ -1134,21 +1160,6 @@ class Stats {
1134
1160
processChunkGroups ( outputChunkGroups , "Chunk Group" ) ;
1135
1161
}
1136
1162
1137
- const modulesByIdentifier = { } ;
1138
- if ( obj . modules ) {
1139
- for ( const module of obj . modules ) {
1140
- modulesByIdentifier [ `$${ module . identifier } ` ] = module ;
1141
- }
1142
- } else if ( obj . chunks ) {
1143
- for ( const chunk of obj . chunks ) {
1144
- if ( chunk . modules ) {
1145
- for ( const module of chunk . modules ) {
1146
- modulesByIdentifier [ `$${ module . identifier } ` ] = module ;
1147
- }
1148
- }
1149
- }
1150
- }
1151
-
1152
1163
const processSizes = sizes => {
1153
1164
const keys = Object . keys ( sizes ) ;
1154
1165
if ( keys . length > 1 ) {
@@ -1341,11 +1352,16 @@ class Stats {
1341
1352
newline ( ) ;
1342
1353
}
1343
1354
if ( module . modules ) {
1344
- processModulesList ( module , prefix + "| " ) ;
1355
+ processModulesList ( module , prefix + "| " , "nested module" ) ;
1345
1356
}
1346
1357
} ;
1347
1358
1348
- const processModulesList = ( obj , prefix ) => {
1359
+ const processModulesList = (
1360
+ obj ,
1361
+ prefix ,
1362
+ itemType = "module" ,
1363
+ dependentItemType = "dependent module"
1364
+ ) => {
1349
1365
if ( obj . modules ) {
1350
1366
let maxModuleId = 0 ;
1351
1367
for ( const module of obj . modules ) {
@@ -1397,7 +1413,19 @@ class Stats {
1397
1413
if ( obj . modules . length > 0 ) colors . normal ( " + " ) ;
1398
1414
colors . normal ( obj . filteredModules ) ;
1399
1415
if ( obj . modules . length > 0 ) colors . normal ( " hidden" ) ;
1400
- colors . normal ( obj . filteredModules !== 1 ? " modules" : " module" ) ;
1416
+ colors . normal ( ` ${ itemType } ${ obj . filteredModules !== 1 ? "s" : "" } ` ) ;
1417
+ newline ( ) ;
1418
+ }
1419
+ if ( obj . dependentModules > 0 ) {
1420
+ const additional = obj . modules . length > 0 || obj . filteredModules > 0 ;
1421
+ colors . normal ( prefix ) ;
1422
+ colors . normal ( " " ) ;
1423
+ if ( additional ) colors . normal ( " + " ) ;
1424
+ colors . normal ( obj . dependentModules ) ;
1425
+ if ( additional ) colors . normal ( " hidden" ) ;
1426
+ colors . normal (
1427
+ ` ${ dependentItemType } ${ obj . dependentModules !== 1 ? "s" : "" } `
1428
+ ) ;
1401
1429
newline ( ) ;
1402
1430
}
1403
1431
}
@@ -1473,9 +1501,8 @@ class Stats {
1473
1501
colors . normal ( "[" ) ;
1474
1502
colors . normal ( origin . moduleId ) ;
1475
1503
colors . normal ( "] " ) ;
1476
- const module = modulesByIdentifier [ `$${ origin . module } ` ] ;
1477
- if ( module ) {
1478
- colors . bold ( module . name ) ;
1504
+ if ( origin . moduleName ) {
1505
+ colors . bold ( origin . moduleName ) ;
1479
1506
colors . normal ( " " ) ;
1480
1507
}
1481
1508
}
@@ -1485,7 +1512,21 @@ class Stats {
1485
1512
newline ( ) ;
1486
1513
}
1487
1514
}
1488
- processModulesList ( chunk , " " ) ;
1515
+ const hasRootModules =
1516
+ chunk . rootModules ||
1517
+ chunk . filteredRootModules ||
1518
+ chunk . nonRootModules ;
1519
+ processModulesList (
1520
+ {
1521
+ modules : chunk . rootModules ,
1522
+ filteredModules : chunk . filteredRootModules ,
1523
+ dependentModules : chunk . nonRootModules
1524
+ } ,
1525
+ " " ,
1526
+ "root module" ,
1527
+ "dependent module"
1528
+ ) ;
1529
+ processModulesList ( chunk , hasRootModules ? " | " : " " , "chunk module" ) ;
1489
1530
}
1490
1531
}
1491
1532
@@ -1552,6 +1593,7 @@ class Stats {
1552
1593
modules : false ,
1553
1594
chunks : true ,
1554
1595
chunkModules : true ,
1596
+ chunkRootModules : false ,
1555
1597
chunkOrigins : true ,
1556
1598
depth : true ,
1557
1599
env : true ,
@@ -1572,6 +1614,7 @@ class Stats {
1572
1614
chunkGroups : true ,
1573
1615
chunks : true ,
1574
1616
chunkModules : false ,
1617
+ chunkRootModules : false ,
1575
1618
chunkOrigins : true ,
1576
1619
depth : true ,
1577
1620
usedExports : true ,
0 commit comments