@@ -197,7 +197,8 @@ class ConcatenatedModule extends Module {
197197 exportMap : exportMap ,
198198 reexportMap : reexportMap ,
199199 needCompatibilityFlag : false ,
200- needNamespaceObject : false
200+ needNamespaceObject : false ,
201+ namespaceObjectSource : null
201202 } ;
202203 } ) ;
203204
@@ -282,6 +283,7 @@ class ConcatenatedModule extends Module {
282283
283284 modulesWithInfo . forEach ( info => {
284285 const namespaceObjectName = this . findNewName ( "namespaceObject" , allUsedNames , null , info . module . readableIdentifier ( requestShortener ) ) ;
286+ allUsedNames . add ( namespaceObjectName ) ;
285287 info . internalNames . set ( namespaceObjectName , namespaceObjectName ) ;
286288 info . exportMap . set ( true , namespaceObjectName ) ;
287289 info . moduleScope . variables . forEach ( variable => {
@@ -332,16 +334,26 @@ class ConcatenatedModule extends Module {
332334 if ( moduleToInfoMap . get ( this . rootModule ) . needCompatibilityFlag ) {
333335 result . add ( `Object.defineProperty(${ this . rootModule . exportsArgument || "exports" } , "__esModule", { value: true });\n` ) ;
334336 }
337+ let generated ;
338+ do {
339+ generated = false ;
340+ modulesWithInfo . forEach ( info => {
341+ if ( info . needNamespaceObject && ! info . namespaceObjectSource ) {
342+ const name = info . exportMap . get ( true ) ;
343+ const nsObj = [ `var ${ name } = {};` ] ;
344+ for ( const exportName of info . module . providedExports ) {
345+ const finalName = getFinalName ( info , exportName , moduleToInfoMap , requestShortener ) ;
346+ nsObj . push ( `__webpack_require__.d(${ name } , ${ JSON . stringify ( exportName ) } , function() { return ${ finalName } ; });` ) ;
347+ }
348+ info . namespaceObjectSource = nsObj . join ( "\n" ) + "\n" ;
349+ generated = true ;
350+ }
351+ } ) ;
352+ } while ( generated ) ;
335353 modulesWithInfo . forEach ( info => {
336354 result . add ( `\n// CONCATENATED MODULE: ${ info . module . readableIdentifier ( requestShortener ) } \n` ) ;
337- if ( info . needNamespaceObject ) {
338- const name = info . exportMap . get ( true ) ;
339- const nsObj = [ `var ${ name } = {};` ] ;
340- for ( const exportName of info . module . providedExports ) {
341- const finalName = getFinalName ( info , exportName , moduleToInfoMap , requestShortener ) ;
342- nsObj . push ( `__webpack_require__.d(${ name } , ${ JSON . stringify ( exportName ) } , function() { return ${ finalName } ; });` ) ;
343- }
344- result . add ( nsObj . join ( "\n" ) + "\n" ) ;
355+ if ( info . namespaceObjectSource ) {
356+ result . add ( info . namespaceObjectSource ) ;
345357 }
346358 result . add ( info . source ) ;
347359 } ) ;
0 commit comments