@@ -187,13 +187,11 @@ class StatsManager {
187
187
188
188
private _getModuleAssets (
189
189
compilation : Compilation ,
190
+ entryPointNames : string [ ] ,
190
191
) : Record < string , StatsAssets > {
191
192
const { chunks } = compilation ;
192
193
const { exposeFileNameImportMap } = this . _containerManager ;
193
194
const assets : Record < string , StatsAssets > = { } ;
194
- const entryPointNames = [ ...compilation . entrypoints . values ( ) ]
195
- . map ( ( e ) => e . name )
196
- . filter ( ( v ) => ! ! v ) as Array < string > ;
197
195
198
196
chunks . forEach ( ( chunk ) => {
199
197
if (
@@ -214,6 +212,7 @@ class StatsManager {
214
212
private _getProvideSharedAssets (
215
213
compilation : Compilation ,
216
214
stats : StatsCompilation ,
215
+ entryPointNames : string [ ] ,
217
216
) : StatsAssets {
218
217
const sharedModules = stats . modules ! . filter ( ( module ) => {
219
218
if ( ! module || ! module . name ) {
@@ -241,23 +240,14 @@ class StatsManager {
241
240
const chunk = findChunk ( chunkID , compilation . chunks ) ;
242
241
243
242
manifestOverrideChunkIDMap [ sharedModuleName ] . sync . add ( chunkID ) ;
244
- Array . from ( chunk ! . getAllInitialChunks ( ) as Iterable < Chunk > ) . forEach (
245
- ( syncChunk : Chunk ) => {
246
- syncChunk . id &&
247
- manifestOverrideChunkIDMap [ sharedModuleName ] . sync . add (
248
- syncChunk . id ,
249
- ) ;
250
- } ,
251
- ) ;
252
-
253
- Array . from ( chunk ! . getAllAsyncChunks ( ) as Iterable < Chunk > ) . forEach (
254
- ( asyncChunk : Chunk ) => {
255
- asyncChunk . id &&
256
- manifestOverrideChunkIDMap [ sharedModuleName ] . async . add (
257
- asyncChunk . id ,
258
- ) ;
259
- } ,
260
- ) ;
243
+ if ( ! chunk ) {
244
+ return ;
245
+ }
246
+ [ ...chunk . groupsIterable ] . forEach ( ( group ) => {
247
+ if ( group . name && ! entryPointNames . includes ( group . name ) ) {
248
+ manifestOverrideChunkIDMap [ sharedModuleName ] . sync . add ( group . id ) ;
249
+ }
250
+ } ) ;
261
251
} ) ;
262
252
} ) ;
263
253
@@ -360,12 +350,16 @@ class StatsManager {
360
350
bundler : this . _bundler ,
361
351
} ) ;
362
352
const { remotes, exposesMap, sharedMap } = moduleHandler . collect ( ) ;
353
+ const entryPointNames = [ ...compilation . entrypoints . values ( ) ]
354
+ . map ( ( e ) => e . name )
355
+ . filter ( ( v ) => ! ! v ) as Array < string > ;
363
356
364
357
await Promise . all ( [
365
358
new Promise < void > ( ( resolve ) => {
366
359
const sharedAssets = this . _getProvideSharedAssets (
367
360
compilation ,
368
361
webpackStats ,
362
+ entryPointNames ,
369
363
) ;
370
364
371
365
Object . keys ( sharedMap ) . forEach ( ( sharedKey ) => {
@@ -377,7 +371,10 @@ class StatsManager {
377
371
resolve ( ) ;
378
372
} ) ,
379
373
new Promise < void > ( ( resolve ) => {
380
- const moduleAssets = this . _getModuleAssets ( compilation ) ;
374
+ const moduleAssets = this . _getModuleAssets (
375
+ compilation ,
376
+ entryPointNames ,
377
+ ) ;
381
378
382
379
Object . keys ( exposesMap ) . forEach ( ( exposeKey ) => {
383
380
const assets = moduleAssets [ exposeKey ] ;
@@ -418,14 +415,35 @@ class StatsManager {
418
415
} ) ) ;
419
416
resolve ( ) ;
420
417
} ) ,
421
- new Promise < void > ( ( resolve ) => {
422
- stats . exposes = Object . values ( exposesMap ) . map ( ( expose ) => ( {
423
- ...expose ,
424
- } ) ) ;
425
- resolve ( ) ;
426
- } ) ,
427
418
] ) ;
428
419
420
+ await new Promise < void > ( ( resolve ) => {
421
+ const sharedAssets = stats . shared . reduce ( ( sum , shared ) => {
422
+ const { js, css } = shared . assets ;
423
+ [ ...js . sync , ...js . async , ...css . async , css . sync ] . forEach ( ( asset ) => {
424
+ sum . add ( asset ) ;
425
+ } ) ;
426
+ return sum ;
427
+ } , new Set ( ) ) ;
428
+ stats . exposes = Object . values ( exposesMap ) . map ( ( expose ) => {
429
+ const { js, css } = expose . assets ;
430
+ return {
431
+ ...expose ,
432
+ assets : {
433
+ js : {
434
+ sync : js . sync . filter ( ( asset ) => ! sharedAssets . has ( asset ) ) ,
435
+ async : js . async . filter ( ( asset ) => ! sharedAssets . has ( asset ) ) ,
436
+ } ,
437
+ css : {
438
+ sync : css . sync . filter ( ( asset ) => ! sharedAssets . has ( asset ) ) ,
439
+ async : css . async . filter ( ( asset ) => ! sharedAssets . has ( asset ) ) ,
440
+ } ,
441
+ } ,
442
+ } ;
443
+ } ) ;
444
+ resolve ( ) ;
445
+ } ) ;
446
+
429
447
return stats ;
430
448
} catch ( err ) {
431
449
throw err ;
0 commit comments