Turborepo 1.1

Jared Palmer
Name
Jared Palmer
X
@jaredpalmer
Becca Z.
Name
Becca Z.
X
@becca__z
Gaspar Garcia
Name
Gaspar Garcia
X
@gaspargarcia_
Greg Soltis
Name
Greg Soltis
X
@gsoltis

12월 중순 Turborepo v1.0을 출시한 이후 놀라운 도입률을 보였습니다:

Weekly npm downloads of turbo

Turborepo v1.1에서는 빌드 성능과 캐싱을 더욱 개선하고 다음 기능을 제공합니다:

npm install turbo@latest를 실행하여 오늘 업데이트하세요. turbo를 실행한 후 @turbo/codemod를 사용하여 v1.1에 대한 자동 마이그레이션을 실행하는 방법에 대한 지침이 표시됩니다.

자동 마이그레이션

Turborepo는 이제 기능이 더 이상 사용되지 않거나 향후 사용 중단될 때 Turborepo 코드베이스를 업그레이드하는 데 도움이 되는 멱등성 코드 변환 및 자동 마이그레이션 스크립트(일명 "codemod")를 제공합니다.

Codemod는 프로그래밍 방식으로 코드베이스에서 실행되는 변환입니다. 이를 통해 모든 파일을 수동으로 검토하고 편집하지 않고도 코드에 대량의 변경 사항을 자동으로 적용하여 시간을 절약할 수 있습니다.

사용법

Terminal
npx @turbo/codemod <transform> <path>

특정 변환에 대한 자세한 내용은 새로운 Codemod 문서를 확인하세요.

turbo.json 지원

Turborepo 구성이 이제 모노레포 루트의 turbo.json 파일에 정의됩니다. 이는 코드 편집기에서 Turborepo 구성으로 빠르게 이동하려는 사용자를 위해 package.jsonturbo 키를 포함하는 것보다 개선된 방식입니다.

package.json의 현재 구성에서 자동으로 마이그레이션하려면 새 브랜치를 체크아웃하고 모노레포 루트로 이동한 다음 다음 codemod를 실행하세요:

Terminal
npx @turbo/codemod create-turbo-config .

이 변환에 대한 자세한 내용은 문서를 확인하세요.

더 빠른 패키지 매니저 감지

Turborepo는 이제 더 빠른 패키지 매니저 감지를 위해 최근 설정된 package.jsonpackageManager 필드를 지원합니다. 이전에는 turbo가 특정 파일을 확인하여 이 정보를 추론했습니다. 이 필드를 자동으로 설정하려면 새 브랜치를 체크아웃하고 모노레포 루트로 이동한 다음 다음을 실행하세요:

Terminal
npx @turbo/codemod add-package-manager .

이 변환에 대한 자세한 내용은 문서를 확인하세요.

환경 변수 종속성

빌드 시 환경 변수를 인라인하는 도구(예: Next.js 또는 Create React App)와 함께 turbo를 사용하는 경우, 잘못된 환경 변수로 캐시된 아티팩트를 배포하지 않도록 turbo에 이를 알리는 것이 중요합니다.

이제 환경 변수 값과 파일 내용을 기반으로 turbo캐시 지문(일명 해싱) 동작을 제어할 수 있습니다:

Turborepo logo
./turbo.json
{
  "pipeline": {
    "build": {
      "dependsOn": {
        "^build"
        // env vars will impact hashes of all "build" tasks
        "$SOME_ENV_VAR"
      },
      "outputs": ["dist/**"]
    },
    "web#build": { // override settings for the "build" task for the "web" app
      "dependsOn": [
        "^build",
          // env vars that will impact the hash of "build" task for only "web" app
          "$STRIPE_SECRET_KEY",
          "$NEXT_PUBLIC_STRIPE_PUBLIC_KEY",
          "$NEXT_PUBLIC_ANALYTICS_ID",
      ],
      "outputs": [".next/**", "!.next/cache/**"],
    },
    "docs#build": { // override settings for the "build" task for the "docs" app
      "dependsOn": [
        "^build",
          // env vars that will impact the hash of "build" task for only "web" app
          "$STRIPE_SECRET_KEY",
          "$NEXT_PUBLIC_STRIPE_PUBLIC_KEY",
          "$NEXT_PUBLIC_ANALYTICS_ID",
      ],
      "outputs": [".next/**", "!.next/cache/**"],
    }
  },
  "globalDependencies": [
    "$GITHUB_TOKEN"// env var that will impact the hashes of all tasks,
    "tsconfig.json" // file contents will impact the hashes of all tasks,
    ".env.*" // glob file contents will impact the hashes of all tasks,
  ]
}

참고: 대부분의 모노레포에서는 공유 패키지에서 환경 변수를 자주 사용하지 않고 주로 애플리케이션에서 사용합니다. 따라서 더 높은 캐시 적중률을 얻으려면 환경 변수가 사용/인라인되는 앱별 작업에만 환경 변수를 포함해야 합니다.

자세한 내용은 캐싱 및 해싱 문서를 읽어보세요.

Yarn v2/v3 부분 지원

Yarn v1, npm 및 pnpm 패키지 매니저 외에도 Turborepo는 이제 .yarnrc.ymlnodeLinker: "node-modules" 설정을 사용하는 Yarn v2+를 지원합니다. 이 키는 Yarn v2+에게 Yarn v1의 node_modules 설치 동작을 모방하도록 지시합니다. Yarn v2+ Plug'n'Play(일명 "PnP")는 현재 지원되지 않습니다.

다음은 무엇입니까?

출시 이후 Turborepo는 원활한 점진적 도입/마이그레이션과 CI/CD 속도 향상에 중점을 두었습니다. 우리는 이 두 가지 가치에 계속 전념하지만 이제는 로컬 개발 및 관찰 가능성을 위한 Turborepo의 일상적인 인체공학 개선에도 중점을 둘 것입니다. 우리는 이 다음 장에 대해 정말 기대하고 있으며 곧 더 많은 세부 정보를 공유할 것입니다.

인재 채용 중!

Vercel의 Turborepo 팀이 채용 중입니다! Turborepo를 더욱 개선하는 데 도움을 줄 풀타임 Senior Full Stack Software EngineersSenior DevOps/Infrastructure Engineers를 구체적으로 찾고 있습니다.