@@ -206,15 +206,20 @@ class Compilation extends Tapable {
206206 }
207207
208208 processModuleDependencies ( module , callback ) {
209- const dependencies = [ ] ;
209+ const dependencies = new Map ( ) ;
210210
211211 const addDependency = dep => {
212- for ( let i = 0 ; i < dependencies . length ; i ++ ) {
213- if ( dep . isEqualResource ( dependencies [ i ] [ 0 ] ) ) {
214- return dependencies [ i ] . push ( dep ) ;
215- }
212+ const resourceIdent = dep . getResourceIdentifier ( ) ;
213+ if ( resourceIdent ) {
214+ const factory = this . dependencyFactories . get ( dep . constructor ) ;
215+ let innerMap = dependencies . get ( factory ) ;
216+ if ( innerMap === undefined )
217+ dependencies . set ( factory , innerMap = new Map ( ) ) ;
218+ let list = innerMap . get ( resourceIdent ) ;
219+ if ( list === undefined )
220+ innerMap . set ( resourceIdent , list = [ ] ) ;
221+ list . push ( dep ) ;
216222 }
217- dependencies . push ( [ dep ] ) ;
218223 } ;
219224
220225 const addDependenciesBlock = block => {
@@ -230,23 +235,27 @@ class Compilation extends Tapable {
230235 } ;
231236
232237 addDependenciesBlock ( module ) ;
233- this . addModuleDependencies ( module , dependencies , this . bail , null , true , callback ) ;
238+
239+ const sortedDependencies = [ ] ;
240+
241+ for ( const pair1 of dependencies ) {
242+ for ( const pair2 of pair1 [ 1 ] ) {
243+ sortedDependencies . push ( {
244+ factory : pair1 [ 0 ] ,
245+ dependencies : pair2 [ 1 ]
246+ } ) ;
247+ }
248+ }
249+
250+ this . addModuleDependencies ( module , sortedDependencies , this . bail , null , true , callback ) ;
234251 }
235252
236253 addModuleDependencies ( module , dependencies , bail , cacheGroup , recursive , callback ) {
237254 let _this = this ;
238255 const start = _this . profile && Date . now ( ) ;
239256
240- const factories = [ ] ;
241- for ( let i = 0 ; i < dependencies . length ; i ++ ) {
242- const factory = _this . dependencyFactories . get ( dependencies [ i ] [ 0 ] . constructor ) ;
243- if ( ! factory ) {
244- return callback ( new Error ( `No module factory available for dependency type: ${ dependencies [ i ] [ 0 ] . constructor . name } ` ) ) ;
245- }
246- factories [ i ] = [ factory , dependencies [ i ] ] ;
247- }
248- asyncLib . forEach ( factories , ( item , callback ) => {
249- const dependencies = item [ 1 ] ;
257+ asyncLib . forEach ( dependencies , ( item , callback ) => {
258+ const dependencies = item . dependencies ;
250259
251260 const errorAndCallback = err => {
252261 err . origin = module ;
@@ -267,7 +276,7 @@ class Compilation extends Tapable {
267276 semaphore . acquire ( ( ) => {
268277 if ( _this === null ) return semaphore . release ( ) ;
269278
270- const factory = item [ 0 ] ;
279+ const factory = item . factory ;
271280 factory . create ( {
272281 contextInfo : {
273282 issuer : module . nameForCondition && module . nameForCondition ( ) ,
0 commit comments