@@ -70,6 +70,7 @@ export class ModuleLoader {
7070 private latestLoadModulesPromise : Promise < unknown > = Promise . resolve ( ) ;
7171 private readonly moduleLoadPromises = new Map < Module , LoadModulePromise > ( ) ;
7272 private readonly modulesWithLoadedDependencies = new Set < Module > ( ) ;
73+ private nextChunkNamePriority = 0 ;
7374 private nextEntryModuleIndex = 0 ;
7475 private readonly readQueue : Queue < LoadResult > ;
7576
@@ -104,27 +105,38 @@ export class ModuleLoader {
104105 } > {
105106 const firstEntryModuleIndex = this . nextEntryModuleIndex ;
106107 this . nextEntryModuleIndex += unresolvedEntryModules . length ;
108+ const firstChunkNamePriority = this . nextChunkNamePriority ;
109+ this . nextChunkNamePriority += unresolvedEntryModules . length ;
107110 const newEntryModules = await this . extendLoadModulesPromise (
108111 Promise . all (
109112 unresolvedEntryModules . map ( ( { id, importer } ) =>
110113 this . loadEntryModule ( id , true , importer , null )
111114 )
112115 ) . then ( entryModules => {
113- let moduleIndex = firstEntryModuleIndex ;
114116 for ( let index = 0 ; index < entryModules . length ; index ++ ) {
115117 const entryModule = entryModules [ index ] ;
116118 entryModule . isUserDefinedEntryPoint =
117119 entryModule . isUserDefinedEntryPoint || isUserDefined ;
118- addChunkNamesToModule ( entryModule , unresolvedEntryModules [ index ] , isUserDefined ) ;
120+ addChunkNamesToModule (
121+ entryModule ,
122+ unresolvedEntryModules [ index ] ,
123+ isUserDefined ,
124+ firstChunkNamePriority + index
125+ ) ;
119126 const existingIndexedModule = this . indexedEntryModules . find (
120127 indexedModule => indexedModule . module === entryModule
121128 ) ;
122129 if ( ! existingIndexedModule ) {
123- this . indexedEntryModules . push ( { index : moduleIndex , module : entryModule } ) ;
130+ this . indexedEntryModules . push ( {
131+ index : firstEntryModuleIndex + index ,
132+ module : entryModule
133+ } ) ;
124134 } else {
125- existingIndexedModule . index = Math . min ( existingIndexedModule . index , moduleIndex ) ;
135+ existingIndexedModule . index = Math . min (
136+ existingIndexedModule . index ,
137+ firstEntryModuleIndex + index
138+ ) ;
126139 }
127- moduleIndex ++ ;
128140 }
129141 this . indexedEntryModules . sort ( ( { index : indexA } , { index : indexB } ) =>
130142 indexA > indexB ? 1 : - 1
@@ -207,10 +219,11 @@ export class ModuleLoader {
207219 unresolvedModule : UnresolvedModule ,
208220 implicitlyLoadedAfter : readonly string [ ]
209221 ) : Promise < Module > {
222+ const chunkNamePriority = this . nextChunkNamePriority ++ ;
210223 return this . extendLoadModulesPromise (
211224 this . loadEntryModule ( unresolvedModule . id , false , unresolvedModule . importer , null ) . then (
212225 async entryModule => {
213- addChunkNamesToModule ( entryModule , unresolvedModule , false ) ;
226+ addChunkNamesToModule ( entryModule , unresolvedModule , false , chunkNamePriority ) ;
214227 if ( ! entryModule . info . isEntry ) {
215228 this . implicitEntryModules . add ( entryModule ) ;
216229 const implicitlyLoadedAfterModules = await Promise . all (
@@ -688,17 +701,16 @@ function normalizeRelativeExternalId(source: string, importer: string | undefine
688701function addChunkNamesToModule (
689702 module : Module ,
690703 { fileName, name } : UnresolvedModule ,
691- isUserDefined : boolean
704+ isUserDefined : boolean ,
705+ priority : number
692706) : void {
693707 if ( fileName !== null ) {
694708 module . chunkFileNames . add ( fileName ) ;
695709 } else if ( name !== null ) {
696- if ( module . chunkName === null ) {
697- module . chunkName = name ;
698- }
699- if ( isUserDefined ) {
700- module . userChunkNames . add ( name ) ;
701- }
710+ // Always keep chunkNames sorted by priority
711+ let namePosition = 0 ;
712+ while ( module . chunkNames [ namePosition ] ?. priority < priority ) namePosition ++ ;
713+ module . chunkNames . splice ( namePosition , 0 , { isUserDefined, name, priority } ) ;
702714 }
703715}
704716
0 commit comments