Angular 6 プロジェクトでライブラリ提供のサービスを拡張する派生クラスの問題をデバッグ/理解するための支援/ポインター/ガイダンスを求めています。
angular.json
既存の Angular 5.x プロジェクトをAngular 6 プロジェクトの新しいワークスペース形式に移動しようとしています。
私の既存のプロジェクトは、Angular アプリケーションと、NgModule
サービスやその他の機能を提供する別の共有で構成されています。共有モジュールは、次のような構造で複数のアプリケーションで使用されます。
project-root/
library/
main-app/
other-app/
私の既存の NG5 コードでは、共有ライブラリがnpm link
TS ソース ファイルとして 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 がモジュール提供のサービスをどのように処理するかを深く理解している人で、私を正しい方向に導くことができる人はいますか?