카테고리 없음

TypeScript composite 빌드 모드 트러블슈팅

DungDung.dev 2026. 4. 7. 10:22

Docker 빌드 시 tsc -p vs tsc -b 혼용, tsbuildinfo 미제외로 발생한 TS6305 에러 패턴 및 해결책

 

## 증상

Docker 빌드 시 `TS6305: Output file '/app/packages/xxx/dist/index.d.ts' has not been built from source file` 에러.

패키지 빌드 단계는 exit 0이지만 dist가 생성되지 않음.

 

## 원인 1 — tsc -p vs tsc -b 혼용

`tsconfig.json`에 `references`가 있는 프로젝트는 `tsc -b`(build mode)로 빌드해야 한다.

- `tsc -p`: 단일 프로젝트만 컴파일, references 무시, `.tsbuildinfo` 미생성

- `tsc -b`: references를 따라 의존 프로젝트 포함 빌드, `.tsbuildinfo` 생성

 

`composite: true`인 패키지를 `tsc -p`로 빌드하면 `.tsbuildinfo`가 생성되지 않아,

이를 참조하는 앱이 `tsc -b`로 빌드할 때 "패키지가 올바르게 빌드되지 않았다"고 판단해 TS6305 발생.

 

**해결:** 모든 패키지/앱의 build 스크립트를 `tsc -p tsconfig.json` → `tsc -b tsconfig.json`으로 통일.

 

## 원인 2 — .dockerignore에 tsbuildinfo 미제외

로컬에서 빌드한 `tsconfig.tsbuildinfo`가 Docker 컨텍스트에 포함되면,

Docker 내부에서 `tsc -b`가 "already up to date"로 판단하고 dist 생성을 건너뜀.

`.dockerignore`에 `**/dist`만 있고 `**/*.tsbuildinfo`가 없으면 이 문제가 발생.

 

**해결:** `.dockerignore`에 `**/*.tsbuildinfo` 추가.

 

## How to apply

- 새 패키지/앱 추가 시 build 스크립트는 `tsc -b` 사용

- `.dockerignore`에 `**/*.tsbuildinfo` 포함 여부 확인