Angular库构建错误:TypeError:无法读取null的属性“ type”

Joh*_*ohn 6 angular angular-aot

在Angular v6中,当尝试构建我的库时,我遇到了一个极端的非描述性问题 BUILD ERROR Cannot read property 'type' of null

BUILD ERROR
Cannot read property 'type' of null
TypeError: Cannot read property 'type' of null
    at /Users/John/apps/tests/service-work/node_modules/@angular/compiler/bundles/compiler.umd.js:15378:27
    at Array.forEach (<anonymous>)
    at removeSummaryDuplicates (/Users/John/apps/tests/service-work/node_modules/@angular/compiler/bundles/compiler.umd.js:15377:11)
    at TemplateParser.tryParseHtml (/Users/John/apps/tests/service-work/node_modules/@angular/compiler/bundles/compiler.umd.js:14806:34)
    at TemplateParser.tryParse (/Users/John/apps/tests/service-work/node_modules/@angular/compiler/bundles/compiler.umd.js:14799:21)
    at TemplateParser.parse (/Users/John/apps/tests/service-work/node_modules/@angular/compiler/bundles/compiler.umd.js:14780:27)
    at AotCompiler._parseTemplate (/Users/John/apps/tests/service-work/node_modules/@angular/compiler/bundles/compiler.umd.js:20483:43)
    at AotCompiler._createTypeCheckBlock (/Users/John/apps/tests/service-work/node_modules/@angular/compiler/bundles/compiler.umd.js:20250:23)
    at /Users/John/apps/tests/service-work/node_modules/@angular/compiler/bundles/compiler.umd.js:20220:27
    at Array.forEach (<anonymous>)
Run Code Online (Sandbox Code Playgroud)

已经解决了这个问题,我正在发布这篇文章,以帮助遇到此问题的其他任何人。

Joh*_*ohn 4

更新

看来我对这个问题的诊断是不正确的(已经过去太久了,我已经记不清我是如何解决它的)。在 Angular 存储库中查看这个问题,了解听起来正确的诊断,

原答案:

经过大量调试后,我发现了:

我的自定义库(我们称之为库 A)将另一个自定义库(库 B)导入到库 A 的NgModule. 库 B 从它的 main 导出几个组件和模块NgModule。问题是,虽然库 B 从它的导出组件和模块NgModule,但我未能通过 javascript/typescript 导出这些组件和模块。解决方案是确保通过我在NgModule.

问题代码示例

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { LibraryBComponent } from './library-b.component';

@NgModule({
  imports: [CommonModule],
  declarations: [LibraryBComponent],
  exports: [LibraryBComponent],
})
export class LibraryBModule {}
Run Code Online (Sandbox Code Playgroud)

解决方案代码

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { LibraryBComponent } from './library-b.component';

export { LibraryBComponent }      // <-- addition

@NgModule({
  imports: [CommonModule],
  declarations: [LibraryBComponent],
  exports: [LibraryBComponent],
})
export class LibraryBModule {}
Run Code Online (Sandbox Code Playgroud)