"Project reference 가 monorepo 를 분할해서 compiler 가 안 바뀐 거 재체크 피하게."
문제
여러 TypeScript 패키지 (예: `packages/api`, `packages/web`, `packages/shared`) 가진 monorepo 에서, naive `tsc` 가 매번 모든 거 재체크. 큰 monorepo 엔 분 단위 걸림 — 개발 loop 엔 너무 길어.
Project reference
각 패키지가 자기 `tsconfig.json` 받음. Root `tsconfig.json` 이 모든 패키지를 `references` 로 나열. 패키지가 의존하는 곳 같은 필드 통해 서로도 reference.
tsc -b (build mode) 가 reference 읽고, dependency 그래프 계산, topological 순서로 컴파일. 결과가 `.tsbuildinfo` 파일에 cache. 후속 실행에 입력 바뀐 패키지만 재컴파일 — 그리고 직접 dependent 만 재체크 필요.
각 패키지의 tsconfig 가 `composite: true` 필요
Project-reference 패키지가 tsconfig 에 "composite": true 설정해야. 이게 incremental build 활성화, 명시 `outDir` 요구, declaration emission 강제 (dependent 가 타입 읽을 수 있게). Flag 가 opt-in.
Project reference 가 monorepo 에서 TS scale 하는 canonical 방법. 없으면 모든 체크가 모든 거 rebuild; 있으면 영향받은 패키지만.