web-dev-qa-db-ja.com

Angularライブラリビルドエラー:TypeError:nullのプロパティ 'type'を読み取れません

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

この問題はすでに解決されているので、この投稿を作成して、この問題に遭遇している他の人を助けます。

6
John

更新

この問題の私の診断は間違っていたようです(私はそれをどのように修正したのか正確に思い出せないので、長い間経っています)。 正しい診断のように聞こえるものについては、Angular repo でこの問題を確認してください、

元の答え:

だから、たくさんのデバッグの後、私はそれを理解しました:

私のカスタムライブラリは、ライブラリAと呼び、別のカスタムライブラリであるライブラリBをライブラリAのNgModuleにインポートします。ライブラリBは、そのメインNgModuleからいくつかのコンポーネントとモジュールをエクスポートします。問題は、ライブラリBがNgModuleからコンポーネントとモジュールをエクスポートする一方で、I failedがjavascript/TypeScriptを介してそれらのコンポーネントとモジュールもエクスポートすることでした。解決策は、NgModuleにエクスポートしたTypeScriptを介してコンポーネント/モジュールを確実にエクスポートすることでした。

問題コードの例

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

同じエラーメッセージでこのページに到達しましたが、Angularライブラリの開発時にyarn linkを使用してnotで解決しました。

これは、デフォルトのライブラリファイルがtsconfig.jsonファイルですでに解決されているためです。だから私のプロジェクトではangularがこれを生成しました:

// 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は必要なく、そのエラーメッセージも表示されません。

2
Ben Winding

私の問題は<projectRoot>/tsconfig.jsonでした( #24143(comment) で確認できます)

基本的に私はtsconfig.jsonからパスを削除する必要がありました:

  "library-b": [
    "dist/library-b"
  ],
  "library-b/*": [
    "dist/library-b/*"
  ]
0
Fabio Picheli

このスレッドは少し古いことを知っていますが、これは誰かがこれに遭遇するのを助けるかもしれません。

Angular 9ライブラリがいくつかのAngularライブラリを消費しているマテリアルコンポーネントとライブラリを消費しているマテリアルコンポーネント)で同じ問題を抱えていましたアイビーを使用しています。

FullTemplateTypeCheckを追加してfalseに設定するとエラーが抑制されますが、欠点としては、発生する可能性のある他のエラーが抑制される可能性があります。

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

例tsconfig.lib.json

"angularCompilerOptions": {
        "fullTemplateTypeCheck": false,
},
0
bcreature

別の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 dev toolsをアップグレードするだけの場合は必要ないかもしれません。

0
kctang