nest.js bootstrap과정에서는 발생하지 않았지만 typeorm migration파일 생성시 에러 발생
A circular dependency has been detected inside @InjectRepository().
Please, make sure that each side of a bidirectional relationships are decorated
with "forwardRef()". Also, try to eliminate barrel files because they can lead
to an unexpected behavior too
하나의 파일에서 re-export하여 import구문을 축약하여 코드를 더 깨끗하게 유지보수할 수 있는 방식
// ./src/app.ts
import { a } from "./util/a";
import { b } from "./util/b";
import { c } from "./util/c";
console.log(a, b, c);
// ./src/app.ts
import { a, b, c } from "./util/barrel";
console.log(a, b, c);
// ./src/util/barrel.ts
export from "./util/a";
export from "./util/b";
export * from "./util/c";
.
└── src/
├── app.ts
└── util/
├── a.ts
├── b.ts
├── c.ts
└── barrel.ts
InjectRepository데코레이터에 의해 의존성 주입시 인스턴스가 undefined되어 발생하였다.
정확한 원인을 찾지 못했지만 ormconfig에 설정된 엔티티 파일경로에 따라 첫번째 로딩 후 클래스들이 캐싱되는데
barrel로 인하여 파일경로 참조값에 오류가 있는것으로 보인다.
barrel없이 직접 import한다.
import {Entity} from './' \\via index.ts
to
import {Entity} from './Entity'
ormconfig의 엔티티 경로를 glob pattern에서 barrel파일로 변경한다
entities: [ 'src/entity/**/*.ts' ]
to
entities: [ 'src/entity/index.ts' ]
참조
https://stackoverflow.com/questions/63257409/nest-js-circular-reference-at-the-moment-to-inject-a-repository
https://github.com/typeorm/typeorm/issues/420
https://github.com/nestjs/nest/issues/1181