에러 백과

NgModule.id를 module.id로 설정하는 안티 패턴

NgModule의 id에 module.id를 사용하는 것은 흔한 안티 패턴이며, 코드에서 유용한 역할을 하지 않을 가능성이 높습니다.

NgModule은 다음과 같이 id를 지정하여 선언할 수 있습니다.

@NgModule({
  id: 'my_module',
})
export class MyModule {}

id를 선언하면 getNgModuleById()로 NgModule을 찾을 수 있습니다. 이 기능은 드물게 사용되며, 주로 직접 참조를 얻지 않고 NgModule을 지연 로드하는 매우 특수한 번들링 상황에서 쓰입니다. 대부분의 Angular 코드에서는 ES 동적 import()(import('./path/to/module'))를 대신 사용해야 합니다. 전역 등록이라는 부수 효과 없이 로드하는 NgModule의 직접 참조를 얻을 수 있기 때문입니다.

getNgModuleById를 사용하지 않는다면 NgModule에 id를 제공할 필요가 없습니다. id를 제공하면 해당 NgModule을 트리 셰이킹할 수 없어 번들 크기에 영향을 줄 수 있다는 큰 단점이 있습니다.

특히 id: module.id를 지정하는 패턴은 @NgModule.id를 잘못 이해한 데서 비롯됩니다. 이전 Angular 버전에서는 @Component 메타데이터에 moduleId: module.id 프로퍼티를 포함해야 할 때가 있었습니다.

오류 디버깅

NgModule에서 id: module.id 선언을 제거하면 됩니다. 컴파일러는 이 선언을 무시하고 대신 이 경고를 표시합니다.