@@ -27,19 +27,25 @@ class PreserveModuleNamePlugin {
2727 modulesBeforeConcat . splice ( i -- , 1 , ...m [ "modules" ] ) ;
2828 }
2929 for ( let module of getPreservedModules ( modules ) ) {
30- let preserve = module [ exports . preserveModuleName ] ;
30+ // Even though it's imported by Aurelia, it's still possible that the module
31+ // became the _root_ of a ConcatenatedModule.
32+ // We use `constructor.name` rather than `instanceof` for compat. with Webpack 2.
33+ let realModule = module ;
34+ if ( module . constructor . name === "ConcatenatedModule" )
35+ realModule = module [ "rootModule" ] ;
36+ let preserve = realModule [ exports . preserveModuleName ] ;
3137 let id = typeof preserve === "string" ? preserve : null ;
3238 // No absolute request to preserve, we try to normalize the module resource
33- if ( ! id && module . resource )
34- id = fixNodeModule ( module , modulesBeforeConcat ) ||
35- makeModuleRelative ( roots , module . resource ) ||
36- aliasRelative ( alias , module . resource ) ;
39+ if ( ! id && realModule . resource )
40+ id = fixNodeModule ( realModule , modulesBeforeConcat ) ||
41+ makeModuleRelative ( roots , realModule . resource ) ||
42+ aliasRelative ( alias , realModule . resource ) ;
3743 if ( ! id )
38- throw new Error ( `Can't figure out a normalized module name for ${ module . rawRequest } , please call PLATFORM.moduleName() somewhere to help.` ) ;
44+ throw new Error ( `Can't figure out a normalized module name for ${ realModule . rawRequest } , please call PLATFORM.moduleName() somewhere to help.` ) ;
3945 // Remove default extensions
4046 normalizers . forEach ( n => id = id . replace ( n , "" ) ) ;
4147 // Keep "async!" in front of code splits proxies, they are used by aurelia-loader
42- if ( / ^ a s y n c [ ? ! ] / . test ( module . rawRequest ) )
48+ if ( / ^ a s y n c [ ? ! ] / . test ( realModule . rawRequest ) )
4349 id = "async!" + id ;
4450 id = id . replace ( / \\ / g, "/" ) ;
4551 if ( module . meta )
0 commit comments