단일 패키지 워크스페이스
Turborepo는 multi-package workspaces(일반적으로 모노레포라고 함)에서 매우 효과적이지만 single-package workspaces를 더 빠르게 만드는 데도 사용할 수 있습니다.
Turborepo의 가장 중요한 기능은 로컬 및 Remote Caching과 작업 병렬화를 포함하여 단일 패키지 워크스페이스에서 작동합니다. 작동하지 않는 기능은 패키지 작업(app#build)과 같이 단일 패키지의 컨텍스트에서 의미가 없는 기능입니다.
Good to know:
단일 패키지 워크스페이스의 예로는 npx create-next-app 또는 npm create vite의 출력이 있습니다.
설치
애플리케이션에 turbo를 설치합니다:
글로벌 turbo를 사용하여 package.json 스크립트 실행(선택 사항)
더 빠른 개발자 워크플로우를 위해 turbo를 전역으로 설치할 수도 있으며 명령줄에서 직접 명령을 실행할 수 있습니다.
설치되면 turbo build를 실행할 수 있으며 Turborepo는 package.json에서 build 스크립트를 실행합니다. turbo build를 다시 실행하면 캐시에 히트합니다.
이 시점에서 turbo는 코드가 변경될 때만 애플리케이션을 다시 빌드할 가능성이 높고 코드가 변경되면 turbo가 캐시를 놓칠 것이기 때문에 많은 가치를 제공하지 않습니다. 두 가지 간단한 단계로 turbo에서 더 많은 것을 얻을 수 있습니다.
하나의 명령으로 여러 스크립트 실행
많은 리포지토리에는 실행해야 할 설정 작업이나 빌드 전 단계가 있습니다. 이러한 작업은 종종 한 번에 하나씩 실행되지만 turbo를 사용하면 쉽게 하나의 스크립트로 전환할 수 있습니다.
예를 들어, 작업을 시작할 때마다 개발 환경을 설정해야 하는 프로젝트가 있다고 가정해 봅시다. 다음이 필요합니다:
- 데이터베이스용 Docker 컨테이너를 시작합니다.
- 데이터베이스에 데이터베이스 스키마를 푸시합니다.
- 데이터베이스에 데이터를 시드합니다.
- 개발 서버를 시작합니다.
Turborepo를 사용하여 이러한 작업을 하나의 명령으로 스케줄링할 수 있습니다. 먼저 package.json에 스크립트를 만듭니다:
그런 다음 turbo.json에 작업을 만들어 이러한 스크립트를 순서대로 실행합니다:


위의 작업에서 dependsOn 배열은 작업의 순차적 순서를 만듭니다. turbo dev를 실행하면 db:up, db:push, db:seed에 대한 스크립트가 먼저 실행됩니다.
작업 병렬화
turbo를 사용하여 작업을 병렬화하면 가능할 때 모든 작업을 한 번에 실행하여 작업 속도를 높일 수 있습니다. 예를 들어, ESLint, TypeScript 및 Prettier 검사를 동시에 실행할 수 있습니다. 다음과 같은 스크립트가 주어지면:
다음과 같은 설정을 만들 수 있습니다:


그런 다음 모든 작업을 동시에 실행하려면:
inputs를 사용한 작업 최적화
Turborepo는 단일 패키지 워크스페이스를 하나의 패키지로 취급하기 때문에 관련 없는 변경 사항이 캐시 미스를 생성하지 않도록 작업에 대한 입력을 최적화하는 데 도움이 될 수 있습니다.
예를 들어, tsc --noEmit을 사용하여 타입을 확인하는 스크립트는 TypeScript 파일만 포함하는 입력으로 설정할 수 있습니다:

