Turborepo 2.5

Thursday, April 3rd, 2025
Nicholas Yang
Name
Nicholas Yang
X
@nicholaslyang
Anthony Shew
Name
Anthony Shew
X
@anthonysheww
Chris Olszewski
Name
Chris Olszewski

Turborepo 2.5는 저장소를 향상시키는 여러 개선 사항을 포함합니다:

npx @turbo/codemod migrate를 실행하여 지금 업그레이드하거나 npx create-turbo@latest로 시작하세요.

Sidecar 작업

경우에 따라 두 개의 장기 실행 작업이 항상 동시에 실행되도록 보장하려고 합니다. 예를 들어, monorepo의 다른 애플리케이션에 요청하는 웹 애플리케이션이 있을 수 있습니다. 백엔드 API 애플리케이션이 요청을 처리할 수 없으므로 웹 애플리케이션만 실행하는 것은 유용하지 않을 수 있습니다.

dependsOn을 사용하여 이 관계를 만들려고 시도했을 수 있지만 장기 실행 작업에 의존하는 것이 허용되지 않는다는 것을 빠르게 발견했습니다. 장기 실행 작업은 절대 종료되지 않으므로 의존 작업이 절대 실행되지 않습니다. 이는 해당 리소스를 사용할 수 있도록 --filter를 신중하게 작성해야 하며 저장소의 모든 사람이 이를 사용하도록 해야 한다는 것을 의미했습니다.

대신 with 키를 도입하여 의존 장기 실행 작업이 런타임에 의존하는 장기 실행 작업과 항상 함께 실행되도록 보장할 수 있습니다.

Turborepo logo
apps/web/turbo.json
{
  "tasks": {
    "dev": {
      "with": ["api#start"],
      "persistent": true,
      "cache": false
    }
  }
}

패키지 구성을 사용하면 web 애플리케이션의 dev 작업이 시작될 때마다 package#task 마이크로신택스를 사용하여 apistart 작업도 실행됩니다.

자세한 내용은 문서를 방문하세요.

--continue 동작에 대한 개선된 제어

기본적으로 Turborepo는 실패한 작업을 만나면 작업 실행을 중지합니다. --continue 플래그를 사용하여 이 동작을 변경할 수 있으며, 하나 이상의 작업이 실패한 경우에도 Turborepo가 작업을 계속 실행하도록 지시합니다.

--continue 플래그가 유용하지만 의존성이 실패한 작업을 실행하면 더 많은 실패로 이어질 때가 있습니다. 이러한 상황을 위해 이번 릴리스에서 --continue 플래그에 새로운 값을 추가했습니다: --continue=dependencies-successful.

Terminal
turbo run test --continue=dependencies-successful

이 값을 사용하면 작업의 모든 의존성이 성공해야 의존 작업이 실행됩니다.

문서에서 자세히 알아보세요.

Turborepo 핵심 팀은 이 기능을 기여해 준 @jenseng에게 감사드립니다.

Turborepo 구성 파일에 주석 추가

이제 구성 파일에 JSONC (turbo.jsonc)를 사용하여 유용한 주석을 추가할 수 있습니다.

./turbo.jsonc
{
  "tasks": {
    "test": {
      // 테스트는 의존성이 먼저 빌드되어야 합니다
      "dependsOn": ["^build"]
    }
  }
}

Bun 저장소용 pruned monorepo

turbo prune은 대상 패키지에 대한 부분 monorepo를 생성하며 특히 monorepo에서 경량 Docker 이미지 생성에 유용합니다. 이 명령은 이전 버전의 Turborepo에서 pnpm, npm 및 Yarn 저장소에 사용할 수 있었습니다.

이번 릴리스에서 turbo prune은 이제 읽고 분석할 수 있는 텍스트 기반 lockfile을 도입한 Bun v1.2+에서 사용할 수 있습니다.

Terminal
turbo prune web

turbo prune에 대해 자세히 알아보려면 문서를 방문하세요.

Turborepo 핵심 팀은 이 기능을 기여해 준 @camero2734에게 감사드립니다.

$TURBO_ROOT$ 마이크로신택스로 workspace 루트 참조

경우에 따라 monorepo에서 패키지 경계를 벗어나야 할 수 있습니다. 이는 최신 패키지 관리자 workspace에 맞지 않는 도구 또는 이상적인 조건에서 벗어나는 점진적 마이그레이션 워크플로우와 같은 여러 제약으로 인한 것일 수 있습니다.

과거에는 글로브가 패키지의 루트에 고정되어 있기 때문에 workspace 루트로 이동하는 경로를 turbo.json에 작성해야 했습니다:

Turborepo logo
./turbo.json
{
  "tasks": {
    "build": {
      "inputs": ["../../important-file.txt"]
    }
  }
}

이 패턴은 작동하지만 경우에 따라 불일치로 이어질 수 있습니다:

대신 이제 $TURBO_ROOT$ 마이크로신택스를 사용할 수 있습니다:

Turborepo logo
./turbo.json
{
  "tasks": {
    "build": {
      "inputs": ["$TURBO_ROOT$/important-file.txt"]
    }
  }
}

이제 이 파일 글로브는 항상 workspace의 루트에서 시작하도록 보장됩니다.

자세한 내용은 문서를 방문하세요.

자체 호스팅용 OpenAPI 사양 뷰어

Turborepo는 Remote Caching 프로토콜에 대한 공개 사양을 갖춘 오픈 소스를 자랑스럽게 생각합니다. Vercel Remote Cache는 무료로 사용할 수 있는 관리형 옵션이지만, OpenAPI 사양을 통해 커뮤니티가 자체 Remote Caching 구현을 만들 수 있습니다.

우리는 한동안 Remote Cache 사양을 JSON으로 웹에 게시해 왔으며 최근 https://turborepo.com/docs/openapi에 사람 친화적인 버전의 사양을 추가했습니다.

자세한 내용은 Remote Caching 문서를 방문하세요.

기타 변경 사항

감사의 말 및 커뮤니티

Turborepo는 핵심 팀을 포함한 모든 기여자들의 결합된 작업의 결과입니다: Anthony, Chris, Dimitri, Nicholas, 그리고 Tom.

Turborepo를 여러분의 빌드 도구로 만들어 주시는 지속적인 지원, 피드백 및 협력에 감사드립니다. 참여 방법을 알아보려면 커뮤니티 페이지를 방문하세요.

또한 이번 Turborepo 릴리스에 기여해 주신 모든 분들께 감사드립니다: @beaussan, @bohongu, @camero2734, @cprussin, @dinglindong, @jenseng, @jimmycathy, @kevincatty, @mm-webx, @ognevny, @pi0, @pudongair, @rootdiae, @shinjith-dev, @sicarius97, @ssshashank, @Tigatok, @todaymoon, @Tyoneb, @victorlagerfors, @vinayaksodar, @wmjae, @x-N0, 그리고 @xiaobei0715.