@@ -29,23 +29,30 @@ export class PreserveModuleNamePlugin {
2929 }
3030
3131 for ( let module of getPreservedModules ( modules ) ) {
32- let preserve : string | true | undefined = module [ preserveModuleName ] ;
32+ // Even though it's imported by Aurelia, it's still possible that the module
33+ // became the _root_ of a ConcatenatedModule.
34+ // We use `constructor.name` rather than `instanceof` for compat. with Webpack 2.
35+ let realModule = module ;
36+ if ( module . constructor . name === "ConcatenatedModule" )
37+ realModule = module [ "rootModule" ] ;
38+
39+ let preserve : string | true | undefined = realModule [ preserveModuleName ] ;
3340 let id = typeof preserve === "string" ? preserve : null ;
3441
3542 // No absolute request to preserve, we try to normalize the module resource
36- if ( ! id && module . resource )
37- id = fixNodeModule ( module , modulesBeforeConcat ) ||
38- makeModuleRelative ( roots , module . resource ) ||
39- aliasRelative ( alias , module . resource ) ;
43+ if ( ! id && realModule . resource )
44+ id = fixNodeModule ( realModule , modulesBeforeConcat ) ||
45+ makeModuleRelative ( roots , realModule . resource ) ||
46+ aliasRelative ( alias , realModule . resource ) ;
4047
4148 if ( ! id )
42- throw new Error ( `Can't figure out a normalized module name for ${ module . rawRequest } , please call PLATFORM.moduleName() somewhere to help.` ) ;
49+ throw new Error ( `Can't figure out a normalized module name for ${ realModule . rawRequest } , please call PLATFORM.moduleName() somewhere to help.` ) ;
4350
4451 // Remove default extensions
4552 normalizers . forEach ( n => id = id ! . replace ( n , "" ) ) ;
4653
4754 // Keep "async!" in front of code splits proxies, they are used by aurelia-loader
48- if ( / ^ a s y n c [ ? ! ] / . test ( module . rawRequest ) )
55+ if ( / ^ a s y n c [ ? ! ] / . test ( realModule . rawRequest ) )
4956 id = "async!" + id ;
5057
5158 id = id . replace ( / \\ / g, "/" ) ;
0 commit comments