다중 언어 지원

Turborepo는 JavaScript 생태계의 규칙을 기반으로 실행할 스크립트와 작업을 찾지만, 이러한 스크립트가 무엇을 하는지는 신경 쓰지 않습니다. JavaScript 워크스페이스에서 패키지를 지정하는 지침을 따르면 Turborepo에 다른 언어나 도구 체인을 추가할 수 있습니다.

예를 들어, 리포지토리의 ./cli 디렉토리에 Rust 프로젝트가 있을 수 있습니다. 이 디렉토리를 JavaScript 패키지 매니저의 워크스페이스에 패키지로 추가하려면 워크스페이스 정의에 디렉토리를 추가하세요:

pnpm-workspace.yaml
packages:
  - "apps/*"
  - "packages/*"
  - "cli"
pnpm workspace 문서

그런 다음 디렉토리에 package.json을 추가합니다:

./cli/package.json
{
  "name": "@repo/rust-cli",
  "scripts": {
    "build": "cargo build --release"
  }
}

이제 turbo build를 사용하면 ./cli/package.json"build" 스크립트가 turbo가 실행하는 작업에 포함됩니다.

빌드 아티팩트 캐싱

빌드의 출력이 turbo.jsonoutputs 키로 캐시되고 있는지 확인하세요. cargo로 컴파일되는 Rust CLI의 경우 릴리스 빌드가 target/release 디렉토리에 생성되며 다음을 사용하여 캐시할 수 있습니다:

Turborepo logo
./turbo.json
{
  "tasks": {
    "build": {
      "outputs": ["target/release/**"] 
    }
  }
}

종속성 관계 생성

디렉토리가 이제 패키지 매니저의 워크스페이스의 일부이므로 JavaScript 패키지와 정확히 동일한 방식으로 종속성을 만들 수 있습니다.

예를 들어, 위의 rust-cli "패키지"가 web 애플리케이션 전에 빌드되도록 하려면 web 애플리케이션의 종속성에 설치하세요:

./web/package.json
{
  "devDependencies": {
+   "@repo/rust-cli": "workspace:*"
  }
}

다음과 같은 build 작업이 있는 turbo.json이 주어지면:

Turborepo logo
./turbo.json
{
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**", "target/release/**"]
    }
  }
}

turbo build는 먼저 Rust CLI에 대한 아티팩트를 생성한 다음 web 애플리케이션을 빌드합니다.