문제 상황
Remote Cache를 적용한 이후, ‘WEB_URL이 설정되지 않았습니다’라는 에러가 발생한다.
-
로컬에서 빌드해도 동일한 에러가 발생한다.
- 이는 remote cache를 CI환경과 공유하기 때문이다.
-
위 에러 메시지는 env패키지의 getSafeConfig 함수에서 던지고 있는 에러이다.
-
env패키지는 cache hit한다.
-
env의 빌드 결과물을 확인해보니 환경 변수가 파싱이 안되고 process.env.xx로 그대로 들어가 있음
var CONFIG = { webUrl: getSafeConfig("WEB_URL", process.env.WEB_URL), supabaseUrl: getSafeConfig("SUPABASE_URL", process.env.SUPABASE_URL), .. };
원인
Turborepo remote cache가 env패키지의 이전 빌드 결과(dist)를 복원한 것이다. .env패키지는 gitignore 파일로 $TURBO_DEFAULT$(git-tracked 파일만)에 미포함 → 캐시 해시에 반영 안됨 → CI에서 .env에 WEB_URL을 써놓아도 Turborepo가 캐시 HIT로 판단해 tsup 빌드를 건너뜀 → 캐시된 dist에 WEB_URL 값이 없음
해결 방법
-
해결 방법: ready태스크의 inputs 명시
// packages/env/turbo.json { "extends": ["//"], "tags": ["infra"], "tasks": { "ready": { "inputs": ["$TURBO_DEFAULT$", ".env", ".env.production"], "outputs": ["dist/**"] } } }.env파일이 다르면 cache miss로, 다시 빌드를 할 것이다.
추가 학습
- turborepo는 기본적으로(TURBO_DEFAULT$) 모든 파일을 변경사항으로 감지해 캐싱하지만(해시값 기반), .env와 같이 git-tracked 파일이 아니라면 해싱하지 않는다. 그래서 명시적으로 .env를 inputs에 설정해야 해싱에 추가한다.