태그
목차

태스크 실행하기

생성일: 2024-06-23

수정일: 2024-06-23

turbo 는 프로젝트의 스크립트를 효율적으로 관리하고 실행할 수 있는 여러 기능들을 제공한다.

package.jsonscripts 에 등록하여 실행하기

자주 실행하는 태스크의 경우, 루트 package.json 에 직접 turbo 를 실행하는 스크립트를 등록하여 사용한다.

// ./package.json
{
  "scripts": {
    "dev": "turbo run dev",
    "build": "turbo run build",
    "test": "turbo run test",
    "lint": "turbo run lint"
  }
}

Note

turboturbo run 의 별칭이다. 하지만 package.json 과 CI 워크플로우에서는 turbo run 을 사용하는 것을 권장한다.

이는 향후 추가될 수 있는 turbo 하위 명령어와의 잠재적 충돌을 피하기 위함이다.

이렇게 등록한 스크립트는 패키지 관리자를 사용하여 실행할 수 있다.

npm run dev

Warning

turbo 명령어는 루트 package.json 에만 작성해야 한다.

패키지의 package.jsonturbo 명령어를 작성하면 turbo 가 재귀적으로 호출될 수 있다.

전역으로 turbo 실행하기

turbo 를 전역적으로 설치하면 터미널에서 직접 명령어를 실행할 수 있다.

전역 turbo 는 다음과 같은 이점이 있다.

  1. 로컬 개발 환경에서의 이점:
    • 터미널에서 직접 turbo 명령어를 사용할 수 있어 편리하다.
    • 필요한 작업을 즉시 실행할 수 있는 유연성을 제공한다.
  2. CI 파이프라인에서의 이점:
    • 자동화된 빌드, 테스트, 배포 과정에서 더 세밀한 제어가 가능하다.
    • 각 단계에서 필요한 정확한 태스크만 실행할 수 있다.

자동 패키지 범위 지정

특정 패키지 폴더 안에서 turbo 명령을 실행하면, 자동으로 해당 패키지의 태스크만 실행된다.

이렇게 하면 필터링 옵션을 적용하지 않고도 특정 패키지의 태스크를 실행할 수 있다.

cd apps/docs
turbo build

Note

--filter 옵션을 사용하면 현재 있는 폴더와 상관없이 필터에 지정된 패키지에 대해 태스크가 실행된다.

명령어 옵션

Turborepo는 명령어를 상황에 맞게 조정할 수 있도록 다양한 옵션 플래그를 제공한다. (참조)

예를 들면, 다음과 같은 워크플로가 있다:

여러 태스크 실행하기

turbo 는 여러 태스크를 실행할 수 있으며, 가능한 경우 병렬로 처리한다.

turbo run build test lint check-types

태스크의 순서

명령어에서 태스크의 순서는 중요하지 않다.

Turborepo가 태스크 간의 관게를 고려하여 알아서 적절한 순서로 태스크를 실행한다.

예를 들어, turbo test lintturbo lint test 의 결과는 같다.

특정 태스크가 다른 태스크에 의존성이 있다면 이를 별도로 설정 파일에 정의해야 한다.

필터 사용하기

--filter API 고급 사용 사례

자세한 내용은 문서를 참조한다.

필터의 일반적인 사용 사례는 다음과 같다.

패키지 이름으로 필터링하기

현재 작업 중인 패키지에 대해서만 태스크를 실행할 수 있다.

turbo build --filter=@acme/web

디렉토리로 필터링하기

관련 패키지들을 그룹화하는 디렉토리 구조가 있는 경우, 글로브(glob)를 사용하여 해당 그룹의 패키지들에 대해서만 태스크를 실행할 수 있다.

turbo lint --filter="./packages/utilities/*"

의존하는 패키지를 포함하여 필터링하기

어떤 패키지를 변경하면, 그 패키지를 사용하는 다른 패키지들도 영향을 받을 수 있다.

이때 ... 문법을 사용할 수 있다.

turbo build --filter=...ui

위의 명령은 ui 패키지와 함께 ui 패키지를 사용하는 모든 다른 패키지들도 빌드한다.

이렇게 하면 한 패키지를 변경했을 때, 그 변경이 다른 패키지들에 문제를 일으키지 않는지 한 번에 확인할 수 있다.

소스 컨트롤 변경을 기준으로 필터링하기

프로젝트에서 코드를 변경했을 때, 변경된 부분과 관련된 태스크만 실행할 수 있다.

이 필터들은 [] 안에 넣어 사용한다. 예를 들면:

  1. 이전 커밋과 비교하기:
    • turbo build --filter=[HEAD^1]
    • 가장 최근에 변경한 부분만 빌드한다.
  2. 메인 브랜치와 비교하기:
    • turbo build --filter=[main...my-feature]
    • 메인 브랜치에서 변경된 부분만 빌드한다.
  3. SHA를 사용하여 특정 커밋들 사이의 변경 비교하기:
    • turbo build --filter=[a1b2c3d...e4f5g6h]
    • 두 커밋 사이에 변경된 부분만 빌드한다.
  4. 다른 브랜치와 비교하기:
    • turbo build --filter=[your-feature...my-feature]
    • 두 브랜치 사이의 차이점만 빌드한다.

Note

이 방법을 사용하면 변경된 부분만 효율적으로 작업할 수 있다.

또한 Turborepo의 캐시 기능을 사용하면, 변경되지 않은 부분은 이전 결과를 재사용하여 전체 작업 시간을 줄일 수 있다.

필터 조합하기

더욱 세밀한 제어를 위해 여러 필터를 조합하여 사용할 수 있다.

turbo build --filter=...ui --filter={./packages/*} --filter=[HEAD^1]

필터는 합집합으로 결합되며, 이 중 어느 하나라도 해당되는 패키지에 대해 태스크가 실행된다.

--filter API 고급 사용 사례

자세한 내용은 문서를 참조한다.