diff --git a/packages/compiler-cli/ngcc/src/packages/entry_point.ts b/packages/compiler-cli/ngcc/src/packages/entry_point.ts index d0e485fb8d..b7a720755b 100644 --- a/packages/compiler-cli/ngcc/src/packages/entry_point.ts +++ b/packages/compiler-cli/ngcc/src/packages/entry_point.ts @@ -123,7 +123,11 @@ export function getEntryPointFormat( case 'esm5': return 'esm5'; case 'main': - const pathToMain = AbsoluteFsPath.join(entryPoint.path, entryPoint.packageJson['main'] !); + const mainFile = entryPoint.packageJson['main']; + if (mainFile === undefined) { + return undefined; + } + const pathToMain = AbsoluteFsPath.join(entryPoint.path, mainFile); return isUmdModule(fs, pathToMain) ? 'umd' : 'commonjs'; case 'module': return 'esm5'; diff --git a/packages/compiler-cli/ngcc/test/integration/ngcc_spec.ts b/packages/compiler-cli/ngcc/test/integration/ngcc_spec.ts index b92b7667d0..2fc2d4506a 100644 --- a/packages/compiler-cli/ngcc/test/integration/ngcc_spec.ts +++ b/packages/compiler-cli/ngcc/test/integration/ngcc_spec.ts @@ -38,6 +38,19 @@ describe('ngcc main()', () => { .not.toThrow(); }); + it('should run ngcc without errors when "main" property is not present', () => { + mainNgcc({ + basePath: '/dist', + propertiesToConsider: ['main', 'es2015'], + logger: new MockLogger(), + }); + + expect(loadPackage('local-package', '/dist').__processed_by_ivy_ngcc__).toEqual({ + es2015: '0.0.0-PLACEHOLDER', + typings: '0.0.0-PLACEHOLDER', + }); + }); + describe('with targetEntryPointPath', () => { it('should only compile the given package entry-point (and its dependencies).', () => { const STANDARD_MARKERS = {