2017-11-04 16 views
1

내 앱에는 간단한 데이터 모델 클래스가 많이 있습니다. 예 :각도가 느슨한 모듈과 공유 모델 클래스

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

주의 사항은 ClientService 공급자 클래스가 아닙니다. 이것은 전체 응용 프로그램에 사용되는 핵심 모델 클래스입니다. 이제는 느린로드 된 모듈을 구현하려고합니다. Angular docs은 구성 요소, 공급자, 지시문 및 파이프를 공유하는 방법을 설명합니다. 그러나 단순한 (주석이 달린) 클래스는 없다. Heros 예제는 an exported model class이지만 모듈 외부에서는 사용되지 않습니다.

루트 모듈은 모든 모델 클래스를 가져와야한다고 생각합니다. 그런 다음 기능 모듈은 모델 클래스 선언 만 가져와야합니다. 모든 모듈이로드 된 후 하나의 fullName() 메소드 정의가 있어야합니다. 이것은 내가 모델 클래스를위한 모듈을 정의해야한다는 것을 의미합니까? 주석이 달리지 않은 클래스에서이 작업을 수행 할 수 있습니까?

업데이트 : dist 디렉토리의 파일을 검사했습니다. Client 클래스 메소드는 지연로드 모듈 (* .chunk.js)에 포함되어 있지 않습니다. 그러나 이것은 어떻게 작동합니까? Angular/Webpack은 main.bundle.js와 chunk.js 파일에 어떤 클래스를 포함해야하는지 어떻게 알 수 있습니까?

답변

1

Webpack은 글로벌 앱 소스 코드 분석을 수행하며 클래스가 참조하는 register을 유지합니다. 클래스가 a lazy loaded module에서만 참조되는 경우 해당 지연로드 모듈 (* .chunk.js)에 패키지됩니다.

주 모듈에서 참조되는 공통 클래스가 주 묶음으로 묶입니다. 따라서 게으른로드 모듈에 존재하지 않으므로 메인 번들로로드해야합니다.

NgModules (주로드 및 지연로드)은 종속성 그래프의 응용 프로그램 시작점으로 처리됩니다. 모델 클래스는 응용 프로그램 시작점으로 처리 할 수 ​​없으므로 주석을 달 필요가 없습니다 (추가 정보가 필요 없음). Webpack은 의존성을 해결하는 모든 더러운 작업을 수행합니다.