태그
목차

캐시 대상 결정하기

생성일: 2024-03-02

수정일: 2024-03-02

기본적으로 모든 태스크의 콘솔 출력은 항상 터보레포에 의해 캡처된다. 태스크에서 파일을 내보내지 않는 경우(예: Jest를 사용한 단위 테스트) outputs 을 생략할 수 있다. 그 외에는 일반적으로 후속 종속 작업을 실행하기 위해 캡처(및 복원!)해야 하는 디스크의 파일을 지정해야 한다.

캐시 출력 설정

다음과 같이 pipeline.<task>.outputs 내에 글로브 배열을 지정하여 터보레포에서 캐시 출력을 구성할 수 있다:

// turbo.json
{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "build": {
      "outputs": ["dist/**"]
    }
  }
}

포함

앞선 build 태스크 정의에서는 전체 터보레포의 모든 build 태스크에 적용된다는 점에 유의해야 한다. 특히 레포지토리가 커짐에 따라 각 개별 태스크의 출력 위치에 약간의 차이가 있을 수 있다.

예를 들어, 빌드 중에 생성되는 아티팩트가 dist 대신 lib 에 나타나는 유틸리티 워크스페이스가 있을 수 있는데, 이렇게 되면 기존 설정으로는 dist를 사용하는 워크스페이스와 lib을 사용하는 워크스페이스 모두 정상적동 하지 않는다.

이 문제를 해결하는 방법에는 두 가지가 있다. 첫 번째 옵션은 출력에 lib 디렉터리를 포함하는 것이다:

// turbo.json
{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "build": {
      "outputs": ["dist/**", "lib/**"]
    }
  }
}

이 패턴은 터보의 모든 워크스페이스에 대해 distlib 폴더가 비어 있으면 잘 작동한다. turbo 는 해당 폴더에 나타나는 모든 파일을 캡처한다.

그러나 모든 워크스페이스에서 패턴이 충분히 일관되지 않은 경우 워크스페이스별로 패턴을 정의하거나 워크스페이스 구성을 사용할 수 있다.

// turbo.json
{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "app#build": {
      "outputs": ["dist/**"]
    },
    "util#build": {
      "outputs": ["lib/**"]
    }
  }
}

디렉터리 안에 있는 모든 파일을 /** 연산자를 사용하여 지정해야 한다는 것을 알 수 있다. 단순히 디렉터리 이름(예: lib)을 지정하면 디렉터리 자체만 포함되고 그 안의 내용은 포함되지 않는다.

제외

때로는 캐시해야 할 파일을 지정하는 가장 간단한 방법은 포함할 파일을 지정하고 거기에서 제외해야 할 파일을 지정하는 것이다.

예를 들어 기본 Next.js 애플리케이션의 가장 간단한 구성은 다음과 같다:

// turbo.json
{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "app#build": {
      "outputs": [".next/**", "!.next/cache/**"]
    }
  }
}

글로브 패턴 앞에 ! 를 지정하여 일치하는 모든 파일을 제외할 수 있다.