8

在 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>)

已经解决了这个问题,我发布这篇文章是为了帮助其他遇到这个问题的人。

4

6 回答 6

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 {}

解决方案代码

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 {}
于 2018-05-26T02:40:22.650 回答
4

知道这个线程有点旧,但这可能会帮助遇到这个问题的人。

我的 Angular 9 库与我的 Angular 9 库有同样的问题,它围绕着一些 Angular Material 组件,我的库和使用我的库的应用程序都使用 Ivy。

添加 fullTemplateTypeCheck 并将其设置为 false 会抑制错误,但不利的一面是它可能会抑制您可能遇到的其他错误。

https://github.com/ng-packagr/ng-packagr/issues/1087

示例 tsconfig.lib.json

"angularCompilerOptions": {
        "fullTemplateTypeCheck": false,
},
于 2020-03-24T16:42:58.563 回答
2

我带着同样的错误信息来到这个页面,但是在开发 Angular 库时使用解决了这个问题。yarn link

这是因为默认库文件已经在文件中解析tsconfig.json。所以在我的项目中,角度生成了这个:

// tsconfig.json
...
    "paths": {
      "lib-core": [
        "dist/lib-core"
      ],
      "lib-core/*": [
        "dist/lib-core/*"
      ],

然后我在开发库包和应用程序包(使用库)时只运行 2 个终端

  1. ng build --project=lib-core --watch在后台
  2. ng serve --project=my-app用于开发我的应用程序

所以我不需要yarn link,也没有收到该错误消息!

于 2019-04-01T01:27:45.310 回答
1

我通过安装@angular/cdk 8.0.0 版本来解决它。

当我安装 8.2.3 时,构建会报告错误Cannot read property 'type' of null

npm i @angular/cdk@8.0.0它解决了

于 2020-11-12T07:32:39.560 回答
0

在开发使用另一个 Angular 库的 Angular 库时,我遇到了同样的问题。

我建议先升级相关的依赖版本,看看是否能解决问题:

// initial versions (did not work)
"@angular-devkit/build-angular": "~0.13.0",
"@angular-devkit/build-ng-packagr": "~0.13.0",
"@angular/cli": "~7.3.1",
"@angular/compiler-cli": "~7.2.0",

// updated versions (works!)
"@angular-devkit/build-angular": "~0.13.8",
"@angular-devkit/build-ng-packagr": "~0.13.8",
"@angular/cli": "~7.3.8",
"@angular/compiler-cli": "~7.2.14",

这对我有用。

我怀疑 John 提出的解决方案也可以工作(因为我没有重新导出使用的传递库),如果您使用的是旧版本的 Angular 库开发工具,则需要此解决方案。但是,如果您只是升级 Angular lib 开发工具,则可能不需要它。

于 2019-04-25T07:34:29.833 回答
-2

我的问题出在<projectRoot>/tsconfig.json(您可以在#24143(comment)上查看)

基本上我必须从以下位置删除路径tsconfig.json

  "library-b": [
    "dist/library-b"
  ],
  "library-b/*": [
    "dist/library-b/*"
  ]
于 2018-11-13T10:09:11.920 回答