Turborepo 1.3

Thursday, June 23rd, 2022
Greg Soltis
Name
Greg Soltis
X
@gsoltis
Nathan Hammond
Name
Nathan Hammond
Tom Knickman
Name
Tom Knickman
X
@tknickman
Jared Palmer
Name
Jared Palmer
X
@jaredpalmer
Gaspar Garcia
Name
Gaspar Garcia
X
@gaspargarcia_
Becca Z.
Name
Becca Z.
X
@becca__z

Turborepo 1.3에서는 향상된 캐싱 및 유연성을 제공합니다:

npm install turbo@latest를 실행하여 오늘 업데이트하세요.

Pipeline inputs

환경 변수, 종속성 및 파이프라인 구성 외에도, turbo는 각 package.json 스크립트의 해시 핑거프린트(turbo가 캐시를 인덱싱하고 스크립트를 다시 실행해야 하는지 판단하는 데 사용하는 키)를 계산할 때 패키지 폴더에 있는 모든 gitignore되지 않은 파일을 고려합니다. Turborepo 1.3+에서는 turbo.json pipeline에서 inputs glob을 지정하여 캐싱을 위한 특정 스크립트와 관련된 파일을 제어할 수 있습니다. 이는 turbo.json에서 다음을 표현할 수 있음을 의미합니다:

구체적인 예시를 살펴보겠습니다: ./apps/docs-site에 문서 웹사이트용 Next.js 애플리케이션, 일부 패키지 및 모노레포 루트의 ./docs 폴더에 일부 마크다운 파일이 있는 모노레포가 있다고 가정해봅시다.

Example monorepo
.
├── docs/
   ├── api-reference.md
   ├── getting-started.md
   └── intro.md
├── apps/
   ├── docs-site/
   ├── components/
   ├── pages/
   └── [slug].js
   ├── README.md
   └── package.json
   └── web-site/
       ├── pages/
       ├── README.md
       └── package.json
├── packages/
   ├── configs/
   └── ui/
├── package.json
└── turbo.json

Next.js docs-site./docs 폴더의 마크다운 파일을 렌더링한다고 가정해봅시다. 이제 앱의 package.json에서 build 스크립트를 설정하여 turbo.json에서 inputs를 사용하여 관련된 파일(및 캐싱에 영향을 미쳐야 하는 파일)을 더 잘 지정할 수 있습니다:

Turborepo logo
./turbo.json
{
  "$schema": "https://turborepo.com/schema.json",
  "pipeline": {
    // ... 간결성을 위해 생략
    "build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "!.next/cache/**", "dist/**"]
    },
    "docs#build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "!.next/cache/**"],
      // 문서 사이트 빌드의 캐싱에 영향을 미치는 관련 glob 세트 정의
      "inputs": [
        "../../docs/**/*.md",
        "pages/**",
        "components/**",
        "package.json"
      ]
    }
  }
}

참고: outputs와 마찬가지로 inputs는 관련 package.json을 기준으로 정의되지만, 특정 폴더 외부에 있을 수 있습니다 (예: ../../docs/**).

모노레포 루트에서 스크립트 실행 및 캐시

1.3부터 turbo는 모노레포 루트의 package.json 파일에서 스크립트를 실행하고 캐시할 수 있습니다. 이는 Turborepo로 마이그레이션할 때 크게 도움이 됩니다.

이를 설정하려면 turbo.jsonpipeline 구성에서 "//#<script>": {...} 형식을 사용하여 루트 스크립트를 지정합니다. //turbo에게 스크립트가 각 워크스페이스 패키지가 아닌 모노레포 루트를 기준으로 한다는 것을 알려줍니다.

루트 스크립트 및 실행 범위에 대해 주의해야 할 2가지 중요한 사항이 있습니다:

루트 스크립트 check-examples를 정의하고 루트를 test에 옵트인하는 샘플 파이프라인은 다음과 같습니다:

./package.json
{
  "name": "my-turborepo",
  "private": true,
  "scripts": {
    "test": "echo 'test!'",
    "check-examples": "./check-examples.sh"
  },
  "devDependencies": {
    "turbo": "latest"
  }
}
Turborepo logo
./turbo.json
{
  "$schema": "https://turborepo.com/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"]
    },
    "test": {
      "dependsOn": ["^build"],
      "outputs": []
    },
    // This will cause the "test" script from all workspace package.json's
    // AND the root package.json to be included when "turbo run test" is run
    "//#test": {
      "dependsOn": [],
      "outputs": []
    },
    // This will cause the "check-examples" script in the root package.json
    // to be run when "turbo run check-examples" is run. Since a general
    // "check-examples" script is not defined in the pipeline, only the root
    // package.json's "check-examples" script will be included
    // when "turbo run check-examples" is run
    "//#check-examples": {
      "dependsOn": [],
      "outputs": [],
      "inputs": [
        "examples/**/*.ts",
        "examples/**/*.tsx",
        "examples/**/*.json",
        "examples/**/*.js",
        "examples/**/*.yaml",
        "cli/**/*.ts",
        "./scripts/run-example.sh"
      ]
    }
  }
}

참고: 캐싱을 개선하려면 pipeline에서 루트 작업을 선언할 때마다 inputs를 지정하는 것이 좋습니다.

새로운 CI/CD 레시피

다음을 사용하여 Turborepo 및 Remote Caching을 사용하기 위한 레시피를 추가했습니다:

여기에서 보고 싶은 다른 레시피가 있다면 GitHub Discussion을 열어 알려주세요.

기타 버그 수정 및 개선 사항

커뮤니티

4월 초 Turborepo v1.2 릴리스 이후, 놀라운 채택률과 커뮤니티 성장을 보았습니다:

Turborepo는 핵심 팀을 포함한 136명 이상의 기여자들의 결합된 작업의 결과입니다.

이 릴리스는 다음 기여자들의 기여로 완성되었습니다: @gsoltis, @nathanhammond, @tknickman, @jaredpalmer, @zvictor, @ObliviousHarmony, @O4epegb, @rafaeltab, @mcmontseny, @bertspaan, @Jastor11, @enBonnet

Turborepo를 여러분의 빌드 도구로 선택하는 데 대한 지속적인 지원, 피드백 및 협력에 감사드립니다.