본문 바로가기
카테고리 없음

index.ts 에서 re-export 할 때 "Module not foud: Can't resolve '모듈' in ..." 에러

by 찬찬2 2024. 7. 10.

상황: nestjs swagger 로 api 문서를 만들려고 했다. dto 파일에 api 데코레이터를 넣고 나니 사용하고 있는 모든 모듈들에 대한 "Module not foud: Can't resolve '모듈' in ..." 에러메시지가 나오더라.

 

보통 Moudule not found 에러는 모듈을 import 할 때 경로를 잘못지정하면 나온다. 하지만!! 나는 경로를 제대로 입력했다.

 

결론 부터 말하자면 index.ts 에 있는 export * from 'A.module.ts' 를 삭제하고, A 모듈을 import 하는 곳에서 해당 모듈이 있는 정체 경로를 입력하면 된다.

 

편의상 index.ts 에서 많은 dto 를 모아 re-export 하는 방법을 써왔는데 이상하게 export 하는 클래스에 swagger 를 추가하니까 이렇게 되더라.

 

// models/index.ts
export * from './user.dto'
export * from './login-response.dto'

// login-response.dto.ts
import { ApiProperty } from "@nestjs/swagger";
import { Expose } from "class-transformer";

class UserDto {
  @ApiProperty()
  idx: number;
  @ApiProperty()
  userGroupIdx: number;
  @ApiProperty()
  userId: string;
  @ApiProperty()
  name: string;
  @ApiProperty()
  email: string;
  @ApiProperty()
  phone: string;
  @ApiProperty()
  avatar?: string;
  @ApiProperty()
  role: any;
  @ApiProperty()
  status?: string;
}

export class LoginResponseDto {
  user: UserDto;
}

 

여기서 @ApiProperty 데코레이터만 지워주면 에러는 사라진다. 

 

챗GPT 에게 물어보니 그 이유로는 아마,

 

1. Circular Dependencies: 순환 의존성
@ApiProperty 와 같은 데코레이터는 reflect-metadata 패키지를 사용하는데 index.ts 에서 여러 모듈을 re-export 할때 간적적인 순환 의존성 문제가 발생할 수 있다. 즉, 모듈 간의 의존성 관계가 복잡해질 수 있다는 것. 그래서 " @ApiProperty 데코레이터로 인한 메타데이터 처리 과정에서 문제가 발생할 수 있다" 라고 한다.

 

2.  reflect-metadata 패키지 설치여부 확인과 import 가 제대로 되었는지 확인하기.

 

3. 경로 잘못 입력

 

등 이 있다고 한다.

 

해결방법은 index.ts 에서 re-export 하지 않고 import 하는 쪽에서 전체경로로 import 해야 한다.

 

 

 

댓글