@@ -35,30 +35,36 @@ DedupePlugin.prototype.apply = function(compiler) {
3535 } ) ;
3636 compilation . plugin ( "after-optimize-chunks" , function ( chunks ) {
3737 var entryChunks = chunks . filter ( function ( c ) { return c . entry ; } ) ;
38- entryChunks . forEach ( function ( chunk ) {
38+ entryChunks . forEach ( function ( chunk ) { // for each entry chunk
3939 ( function x ( dups , roots , visited , chunk ) {
4040 var currentDups = [ ] ;
4141 var currentRoots = [ ] ;
4242 chunk . modules . forEach ( function ( module ) {
4343 if ( module . duplicates ) {
44+ if ( ! module . rootDuplicatesChunks )
45+ module . rootDuplicatesChunks = module . chunks . slice ( ) ;
46+ var chunkIndex = module . rootDuplicatesChunks . indexOf ( chunk ) ;
47+ if ( ! module . rootDuplicates ) module . rootDuplicates = [ ] ;
4448 var idx = currentDups . indexOf ( module . duplicates ) ;
4549 if ( idx >= 0 ) {
46- module . rootDuplicates = currentRoots [ idx ] ;
47- module . rootDuplicates . push ( module ) ;
48- module . rootDuplicates . commonModules = mergeCommonModules ( module . rootDuplicates . commonModules , module . getAllModuleDependencies ( ) ) ;
50+ module . rootDuplicates [ chunkIndex ] = currentRoots [ idx ] ;
51+ module . rootDuplicates [ chunkIndex ] . push ( module ) ;
52+ module . rootDuplicates [ chunkIndex ] . commonModules =
53+ mergeCommonModules ( module . rootDuplicates [ chunkIndex ] . commonModules , module . getAllModuleDependencies ( ) ) ;
4954 } else {
5055 idx = dups . indexOf ( module . duplicates ) ;
5156 if ( idx < 0 ) {
52- module . rootDuplicates = [ module ] ;
53- module . rootDuplicates . commonModules = module . getAllModuleDependencies ( ) ;
54- module . rootDuplicates . initialCcommonModulesLength = module . rootDuplicates . commonModules . length ;
57+ module . rootDuplicates [ chunkIndex ] = [ module ] ;
58+ module . rootDuplicates [ chunkIndex ] . commonModules = module . getAllModuleDependencies ( ) ;
59+ module . rootDuplicates [ chunkIndex ] . initialCommonModulesLength = module . rootDuplicates [ chunkIndex ] . commonModules . length ;
5560 dups = dups . concat ( [ module . duplicates ] ) ;
56- roots = roots . concat ( [ module . rootDuplicates ] ) ;
61+ roots = roots . concat ( [ module . rootDuplicates [ chunkIndex ] ] ) ;
5762 currentDups = currentDups . concat ( [ module . duplicates ] ) ;
58- currentRoots = currentRoots . concat ( [ module . rootDuplicates ] ) ;
63+ currentRoots = currentRoots . concat ( [ module . rootDuplicates [ chunkIndex ] ] ) ;
5964 } else {
60- module . rootDuplicates = roots [ idx ] ;
61- module . rootDuplicates . commonModules = mergeCommonModules ( module . rootDuplicates . commonModules , module . getAllModuleDependencies ( ) ) ;
65+ module . rootDuplicates [ chunkIndex ] = roots [ idx ] ;
66+ module . rootDuplicates [ chunkIndex ] . commonModules =
67+ mergeCommonModules ( module . rootDuplicates [ chunkIndex ] . commonModules , module . getAllModuleDependencies ( ) ) ;
6268 }
6369 }
6470 }
@@ -70,7 +76,7 @@ DedupePlugin.prototype.apply = function(compiler) {
7076
7177 currentRoots . forEach ( function ( roots ) {
7278 var commonModules = roots . commonModules ;
73- var initialLength = roots . initialCcommonModulesLength ;
79+ var initialLength = roots . initialCommonModulesLength ;
7480 if ( initialLength !== commonModules . length ) {
7581 var template = roots [ 0 ] . createTemplate ( commonModules ) ;
7682 roots . template = template ;
@@ -160,27 +166,30 @@ function DedupModuleTemplateDecorator(template) {
160166 this . template = template ;
161167}
162168
163- DedupModuleTemplateDecorator . prototype . render = function ( module , dependencyTemplates ) {
164- if ( ! module . rootDuplicates ) return this . template . render ( module , dependencyTemplates ) ;
165- if ( module . rootDuplicates . template ) {
166- module . rootDuplicates . template . addReason ( module , {
169+ DedupModuleTemplateDecorator . prototype . render = function ( module , dependencyTemplates , chunk ) {
170+ if ( ! module . rootDuplicatesChunks ) return this . template . render ( module , dependencyTemplates , chunk ) ;
171+ var chunkIndex = module . rootDuplicatesChunks . indexOf ( chunk ) ;
172+ if ( ! module . rootDuplicates || ! module . rootDuplicates [ chunkIndex ] ) return this . template . render ( module , dependencyTemplates , chunk ) ;
173+ var rootDuplicates = module . rootDuplicates [ chunkIndex ] ;
174+ if ( rootDuplicates . template ) {
175+ rootDuplicates . template . addReason ( module , {
167176 type : "template" ,
168177 request : module . request ,
169- templateModules : module . rootDuplicates . template . templateModules
178+ templateModules : rootDuplicates . template . templateModules
170179 } ) ;
171- var array = [ module . rootDuplicates . template . id ] . concat ( module . getTemplateArguments ( module . rootDuplicates . template . templateModules ) . map ( function ( module ) {
180+ var array = [ rootDuplicates . template . id ] . concat ( module . getTemplateArguments ( rootDuplicates . template . templateModules ) . map ( function ( module ) {
172181 if ( typeof module . id !== "number" )
173182 return "(function webpackMissingModule() { throw new Error(" + JSON . stringify ( "Cannot find module" ) + "); }())"
174183 return module . id ;
175184 } ) ) ;
176185 var source = new ConcatSource ( "[" + array . join ( ", " ) + "]" ) ;
177186 return source ;
178187 } else {
179- module . rootDuplicates . sort ( function ( a , b ) {
188+ rootDuplicates . sort ( function ( a , b ) {
180189 return a . id - b . id ;
181190 } ) ;
182- if ( module === module . rootDuplicates [ 0 ] ) return this . template . render ( module , dependencyTemplates ) ;
183- var source = new ConcatSource ( "" + module . rootDuplicates [ 0 ] . id ) ;
191+ if ( module === rootDuplicates [ 0 ] ) return this . template . render ( module , dependencyTemplates , chunk ) ;
192+ var source = new ConcatSource ( "" + rootDuplicates [ 0 ] . id ) ;
184193 return source ;
185194 }
186195} ;
0 commit comments