Turborepo 2.4

Friday, January 31st, 2025
Nicholas Yang
Name
Nicholas Yang
X
@nicholaslyang
Anthony Shew
Name
Anthony Shew
X
@anthonysheww
Chris Olszewski
Name
Chris Olszewski

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

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

Boundaries Experimental

Turborepo는 패키지 관리자 Workspaces 위에 구축되어 저장소의 작업 캐싱을 결정하는 일부로 생태계 규칙에 의존합니다. 그러나 이를 위해서는 저장소의 모든 개발자가 이러한 규칙을 알고 준수해야 합니다.

Boundaries는 이러한 모범 사례가 따라지지 않는 저장소의 위치를 포착하는 실험적 기능입니다. 이를 통해 캐싱이 더 안전해지고 저장소가 향후 Turborepo 기능을 안전하게 사용할 준비가 되도록 보장합니다.

다음을 사용하여 오늘 시도해 보세요:

Terminal
turbo boundaries

Boundaries의 이 초기 반복에는 두 가지 유형의 monorepo 실수를 찾는 것이 포함됩니다:

Boundaries RFC

이러한 내장 진단뿐만 아니라 사용자 정의 Boundaries에 대한 제안이 포함된 Boundaries RFC에 대한 여러분의 피드백을 기대합니다.

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

터미널 UI 개선

Turborepo 2.0에서 처음 출시된 터미널 UI를 계속 반복 개선했습니다.

지속적인 기본 설정

이전 버전의 Turborepo에서는 turbo를 실행할 때마다 터미널 UI를 원하는 상태로 재설정해야 했습니다. Turborepo 2.4에서는 다음을 포함하여 여러분이 만든 UI 선택 중 일부를 유지합니다:

이러한 기본 설정을 유지하면 turbo 호출 전반에 걸쳐 더 원활한 경험을 제공하여 이전 turbo 실행의 상태로 UI를 복원합니다.

새로운 키 바인딩

작업 및 로그 작업을 더 쉽게 할 수 있도록 터미널 UI에 더 많은 기능을 추가했습니다.

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

Watch Mode 캐싱 Experimental

Watch ModeTask Graph에 따라 작업을 다시 실행하는 monorepo 인식 감시자입니다. 이를 통해 많은 작고 덜 강력한 감시자 스크립트가 아닌 단일의 전역적이고 의존성을 인식하는 감시자를 활용하여 monorepo에서 작업하는 새로운 방법을 제공합니다.

이번 릴리스에서는 Watch Mode에 실험적 기능으로 캐싱을 추가합니다. 활성화하려면 --experimental-write-cache 플래그를 사용하세요:

Terminal
turbo watch dev --experimental-write-cache

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

순환 의존성 권장 사항

순환 의존성은 Turborepo의 Task Graph에서 비결정적 순환을 생성하는 패키지 그래프의 루프입니다. 그러나 작업 그래프에 루프가 있는 경우 Turborepo는 두 작업이 서로 의존하기 때문에 어떤 작업이 먼저 오는지 결정할 수 없습니다.

monorepo에서 Turborepo를 채택하는 동안 Turborepo가 이전 작업 실행기보다 더 정교하고 빠른 Task Graph를 생성하므로 순환 의존성을 발견할 수 있습니다. 이전에는 Turborepo가 저장소의 Package Graph에 존재하는 순환에 관련된 모든 패키지를 단순히 나열했습니다. 이제 Turborepo는 그래프의 순환을 제거하기 위해 끊어야 하는 의존성 관계를 포함합니다.

아래 터미널 출력의 이전과 이후를 비교하세요:

Terminal
  × Invalid package dependency graph:
  ╰─▶ Cyclic dependency detected:
  │     @repo/logger, blog, storefront, @repo/ui
  │     The cycle can be broken by removing any of these sets of dependencies:
  │     { @repo/ui -> @repo/logger, @repo/ui -> storefront }
  │     { @repo/logger -> @repo/ui, @repo/ui -> storefront }

  ╰─▶   api, admin
        The cycle can be broken by removing any of these sets of dependencies:
        { admin -> api }
        { api -> admin }

node_modulesschema.json

schema.json 파일은 JSON 파일에 대한 편집기에서 자동 완성 및 유효성 검사를 제공합니다. https://turborepo.com/schema.json에 호스팅된 turbo.jsonschema.json의 웹 액세스 가능 버전이 있지만 일부 개발자는 설치된 turbo 버전과 동기화하기 위해 node_modules에서 파일을 가져오는 것을 선호합니다.

이번 릴리스부터 패키지 관리자의 설치 명령을 실행한 후 node_modules에서 schema.json을 사용할 수 있습니다:

Turborepo logo
turbo.json
{
  "$schema": "./node_modules/turbo/schema.json"
}

node_modules 위치

저장소의 루트에 turbo를 설치하는 것이 좋으므로 스키마 경로는 저장소 루트의 node_modules를 가리켜야 합니다. 패키지 구성에서는 ../../node_modules/turbo/schema.json과 같은 경로를 사용해야 할 수 있습니다.

자세한 정보는 문서를 방문하세요.

ESLint Flat Config 지원

Turborepo 2.4는 2024년 10월 5일 ESLint v8의 수명 종료에 따라 eslint-config-turboeslint-plugin-turbo에서 ESLint v9에 대한 지원을 도입합니다.

./packages/eslint-config/index.js
import turboConfig from 'eslint-config-turbo/flat';
 
export default [
  ...turboConfig,
  // Other configuration
];

구성 및 플러그인은 ESLint v8을 여전히 사용하는 사용자를 위해 원활한 전환을 보장하기 위해 이전 버전과 호환됩니다.

자세한 정보는 문서를 방문하세요.

기타 변경 사항

감사의 말 및 커뮤니티

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

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

또한 이번 Turborepo 릴리스에 기여해 주신 모든 분들께 감사드립니다: @aaronccasanova, @AlvaroParker, @ankur-arch, @arosequist, @atimmer, @bgw, @bitttttten, @chaficnajjar, @codexshell, @eps1lon, @gianelli99, @glitched-w0rld, @JasonnnW3000, @jbrocksfellas, @jeremy-code, @jonathandsouza, @Juneezee, @kayumuzzaman, @krlvi, @maciej-ka, @ognevny, @olets, @pkerschbaum, @romanofski, @shivam-pawar, @takaebato, @tevem1207, @thebrubaker, @Tofandel, @trivikr, @yamz8, 그리고 @zsh77.