From 4bbf16e654351a9b4f1fcb5e68c91f2d29f66682 Mon Sep 17 00:00:00 2001 From: JoostK Date: Sun, 18 Aug 2019 21:23:02 +0200 Subject: [PATCH] fix(ngcc): handle deep imports that already have an extension (#32181) During the dependency analysis phase of ngcc, imports are resolved to files on disk according to certain module resolution rules. Since module specifiers are typically missing extensions, or can refer to index.js barrel files within a directory, the module resolver attempts several postfixes when searching for a module import on disk. Module specifiers that already include an extension, however, would fail to be resolved as ngcc's module resolver failed to check the location on disk without adding any postfixes. Closes #32097 PR Close #32181 --- .../compiler-cli/ngcc/src/dependencies/module_resolver.ts | 2 +- .../ngcc/test/dependencies/module_resolver_spec.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/compiler-cli/ngcc/src/dependencies/module_resolver.ts b/packages/compiler-cli/ngcc/src/dependencies/module_resolver.ts index 1208744b98..b059452ec2 100644 --- a/packages/compiler-cli/ngcc/src/dependencies/module_resolver.ts +++ b/packages/compiler-cli/ngcc/src/dependencies/module_resolver.ts @@ -25,7 +25,7 @@ export class ModuleResolver { private pathMappings: ProcessedPathMapping[]; constructor(private fs: FileSystem, pathMappings?: PathMappings, private relativeExtensions = [ - '.js', '/index.js' + '', '.js', '/index.js' ]) { this.pathMappings = pathMappings ? this.processPathMappings(pathMappings) : []; } diff --git a/packages/compiler-cli/ngcc/test/dependencies/module_resolver_spec.ts b/packages/compiler-cli/ngcc/test/dependencies/module_resolver_spec.ts index c88856fa01..2ef140ca71 100644 --- a/packages/compiler-cli/ngcc/test/dependencies/module_resolver_spec.ts +++ b/packages/compiler-cli/ngcc/test/dependencies/module_resolver_spec.ts @@ -83,6 +83,12 @@ runInEachFileSystem(() => { const resolver = new ModuleResolver(getFileSystem()); expect(resolver.resolveModuleImport('./y', _('/libs/local-package/index.js'))).toBe(null); }); + + it('should resolve modules that already include an extension', () => { + const resolver = new ModuleResolver(getFileSystem()); + expect(resolver.resolveModuleImport('./x.js', _('/libs/local-package/index.js'))) + .toEqual(new ResolvedRelativeModule(_('/libs/local-package/x.js'))); + }); }); describe('with non-mapped external paths', () => {