Skip to content

Commit f09f5c0

Browse files
committed
fix(webpack): ConcatenatedModulePlugin results in an exception.
This happens when an Aurelia module is selected as the root of a concatenated module.
1 parent 449c949 commit f09f5c0

1 file changed

Lines changed: 14 additions & 7 deletions

File tree

src/PreserveModuleNamePlugin.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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 (/^async[?!]/.test(module.rawRequest))
55+
if (/^async[?!]/.test(realModule.rawRequest))
4956
id = "async!" + id;
5057

5158
id = id.replace(/\\/g, "/");

0 commit comments

Comments
 (0)