12

Angular 6 プロジェクトでライブラリ提供のサービスを拡張する派生クラスの問題をデバッグ/理解するための支援/ポインター/ガイダンスを求めています。

angular.json既存の Angular 5.x プロジェクトをAngular 6 プロジェクトの新しいワークスペース形式に移動しようとしています。

私の既存のプロジェクトは、Angular アプリケーションと、NgModuleサービスやその他の機能を提供する別の共有で構成されています。共有モジュールは、次のような構造で複数のアプリケーションで使用されます。

project-root/
    library/
    main-app/
    other-app/

私の既存の NG5 コードでは、共有ライブラリがnpm linkTS ソース ファイルとして main-app に組み込まれています (これは、CLI チームによって明示的に推奨されていませんが、私のチームのワークフローではうまく機能します)。

NG6 アプリでlibraryは、 は 内のライブラリ プロジェクトでありangular.json、そのようにビルドされ、 のパス定義を介してプロジェクトに取り込まれtsconfig.jsonます。ワークスペースは標準の NG6 レイアウトです。

workspace-root/
    dist/...
    node_modules/...
    projects/
        library/
            src/lib/...
        main-app/
            src/app/...
        other-app/
    ...

ほとんどの場合、ライブラリで提供されるサービスはそのまま使用されますが、アプリ固有の機能を提供するためにメインアプリ (またはその他のアプリ) で拡張できます。ng serveこれは Angular 5 では問題なく動作しますが、Angular 6 では、(実行中に) ページを読み込もうとすると、コンソールに次のエラーが表示されます。

Object prototype may only be an Object or null

ここで警告が発生します。

export class FooService extends FooBaseService { // ...
--------------------------------^

ブートストラップ プロセスが FooService をインスタンス化するときに、FooBaseService が「未定義」として入ってきます。

調査によると、このエラーは一般的に循環依存の問題に関連していますが、それが起こっているとは思いません。ライブラリをビルドするときに circ-dep の警告が表示されないか、メイン アプリのビルドで問題が発生します。さらに、madge -c (リンク)dist/libraryを実行しても、またはのどちらにも circ-dep が見つかりません dist/main-app

この問題のデバッグをどのように進めるかについて、私はちょっと困惑しています。Angular 6 がモジュール提供のサービスをどのように処理するかを深く理解している人で、私を正しい方向に導くことができる人はいますか?

4

2 に答える 2