2017-11-04 18 views
1

私のアプリでは、単純なデータモデルクラスがたくさんあります。例:角度のある遅延読み込みモジュールと共有モデルクラス

export class Client { 
    first_name: string; 
    last_name: string; 
    fullName(): string { 
     return `${this.first_name} ${this.last_name}`; 
    } 
} 

これはClientServiceプロバイダークラスではありません。これらは、アプリケーション全体で使用されるコアモデルクラスです。今、私は遅延ロードされたngモジュールを実装したいと思います。 Angular docsには、コンポーネント、プロバイダ、ディレクティブおよびパイプの共有方法が記載されています。しかし、単純な(注釈のない)クラスについては注意が必要です。 Herosの例はan exported model classですが、モジュールの外では使用されていません。

ルートモジュールはすべてのモデルクラスをインポートする必要があります。フィーチャモジュールは、モデルクラスの宣言だけをインポートする必要があります。すべてのモジュールがロードされた後には、1つのfullName()メソッド定義が必要です。つまり、モデルクラスのモジュールを定義する必要がありますか?アノテーションを持たないクラスに対してこれを行うことは可能ですか?

更新:distディレクトリのファイルをチェックしました。 Clientクラスのメソッドは、遅延読み込みモジュール(* .chunk.js)には含まれていないことが判明しました。しかし、これはどのように機能しますか? Angular/Webpackはmain.bundle.jsとchunk.jsファイルにどのクラスをパックするべきかを知っていますか?

答えて

1

Webpackはグローバルなアプリケーションソースコード分析を行い、どのクラスから参照されているのかをregisterに保ちます。クラスがa lazy loaded moduleからのみ参照される場合、それはその遅延読み込みモジュール(* .chunk.js)にパックされます。

メインモジュールから参照される共通クラスがメインバンドルにパックされます。したがって、遅延ロードされたモジュールには存在しません。メインバンドルによってロードされる必要があります。

NgModules(メインおよびレイジーロード)は、依存関係グラフのアプリケーションエントリポイントとして扱われます。モデルクラスはアプリケーションのエントリポイントとして扱うことができないため、注釈を付ける必要はありません(追加情報は不要です)。 Webpackは依存関係を解決するためのすべての汚い作業を行います。

関連する問題