@@ -10,6 +10,7 @@ var SourceMapConsumer = require("source-map").SourceMapConsumer;
10
10
var ModuleFilenameHelpers = require ( "webpack/lib/ModuleFilenameHelpers" ) ;
11
11
var ExtractedModule = require ( "./ExtractedModule" ) ;
12
12
var Chunk = require ( "webpack/lib/Chunk" ) ;
13
+ var OrderUndefinedError = require ( "./OrderUndefinedError" ) ;
13
14
var loaderUtils = require ( "loader-utils" ) ;
14
15
15
16
var nextId = 0 ;
@@ -197,6 +198,13 @@ ExtractTextPlugin.prototype.apply = function(compiler) {
197
198
extractedChunks . forEach ( function ( extractedChunk ) {
198
199
if ( extractedChunk . modules . length ) {
199
200
extractedChunk . modules . sort ( function ( a , b ) {
201
+ var order = getOrder ( a , b ) ;
202
+ if ( isNaN ( order ) ) {
203
+ compilation . errors . push ( new OrderUndefinedError ( a . getOriginalModule ( ) ) ) ;
204
+ compilation . errors . push ( new OrderUndefinedError ( b . getOriginalModule ( ) ) ) ;
205
+ }
206
+ if ( order !== 0 && ! isNaN ( order ) )
207
+ return order ;
200
208
var ai = a . identifier ( ) ;
201
209
var bi = b . identifier ( ) ;
202
210
if ( ai < bi )
@@ -246,24 +254,28 @@ ExtractTextPlugin.prototype.mergeNonInitialChunks = function(chunk, intoChunk, c
246
254
}
247
255
} ;
248
256
249
- ExtractTextPluginCompilation . prototype . addModule = function ( identifier , originalModule , source , additionalInformation , sourceMap ) {
257
+ ExtractTextPluginCompilation . prototype . addModule = function ( identifier , originalModule , source , additionalInformation , sourceMap , prevModules ) {
250
258
if ( ! this . modulesByIdentifier [ identifier ] )
251
- return this . modulesByIdentifier [ identifier ] = new ExtractedModule ( identifier , originalModule , source , sourceMap , additionalInformation ) ;
252
- return this . modulesByIdentifier [ identifier ] ;
259
+ return this . modulesByIdentifier [ identifier ] = new ExtractedModule ( identifier , originalModule , source , sourceMap , additionalInformation , prevModules ) ;
260
+ var m = this . modulesByIdentifier [ identifier ] ;
261
+ m . addPrevModules ( prevModules ) ;
262
+ return m ;
253
263
} ;
254
264
255
265
ExtractTextPluginCompilation . prototype . addResultToChunk = function ( identifier , result , originalModule , extractedChunk ) {
256
266
if ( ! Array . isArray ( result ) ) {
257
267
result = [ [ identifier , result ] ] ;
258
268
}
259
269
var counterMap = { } ;
270
+ var prevModules = [ ] ;
260
271
result . forEach ( function ( item ) {
261
272
var c = counterMap [ item [ 0 ] ] ;
262
273
var i = item . slice ( ) ;
263
- var module = this . addModule . call ( this , item [ 0 ] + ( c || "" ) , originalModule , item [ 1 ] , item [ 2 ] , item [ 3 ] ) ;
274
+ var module = this . addModule . call ( this , item [ 0 ] + ( c || "" ) , originalModule , item [ 1 ] , item [ 2 ] , item [ 3 ] , prevModules . slice ( ) ) ;
264
275
extractedChunk . addModule ( module ) ;
265
276
module . addChunk ( extractedChunk ) ;
266
277
counterMap [ item [ 0 ] ] = ( c || 0 ) + 1 ;
278
+ prevModules . push ( module ) ;
267
279
} , this ) ;
268
280
} ;
269
281
@@ -274,3 +286,15 @@ ExtractTextPlugin.prototype.renderExtractedChunk = function(chunk) {
274
286
} , this ) ;
275
287
return source ;
276
288
} ;
289
+
290
+ function getOrder ( a , b ) {
291
+ var bBeforeA = a . getPrevModules ( ) . indexOf ( b ) >= 0 ;
292
+ var aBeforeB = b . getPrevModules ( ) . indexOf ( a ) >= 0 ;
293
+ if ( aBeforeB && bBeforeA )
294
+ return NaN ;
295
+ if ( bBeforeA )
296
+ return 1 ;
297
+ if ( aBeforeB )
298
+ return - 1 ;
299
+ return 0 ;
300
+ }
0 commit comments