Turborepo 1.4

Tuesday, August 9th, 2022
Greg Soltis
Name
Greg Soltis
X
@gsoltis
Nathan Hammond
Name
Nathan Hammond
Tom Knickman
Name
Tom Knickman
X
@tknickman
Anthony Shew
Name
Anthony Shew
X
@anthonysheww
Jared Palmer
Name
Jared Palmer
X
@jaredpalmer
Mehul Kar
Name
Mehul Kar
X
@mehulkar

Turborepo 1.4의 새로운 기능:

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

자동 환경 변수 포함

환경 전반에 걸쳐 올바른 캐싱을 보장하기 위해 Turborepo는 이제 Astro, Create React App, Gatsby, Next.js, Nuxt, SvelteKit, Vite, Vue 등으로 빌드된 앱의 캐시 키를 계산할 때 공개 환경 변수를 자동으로 추론하고 포함합니다. 수동으로 선언한 경우 turbo.json에서 프레임워크별 공개 환경 변수를 안전하게 제거할 수 있습니다.

Turborepo logo
turbo.json
{
  "pipeline": {
    "build": {
      "dependsOn": [
        "^build"
-       // Include build time public inlined environment variables that
-       // are different in development and production, so that
-       // Turborepo does not use the same cached build
-       // across environments
-       "$NEXT_PUBLIC_EXAMPLE_ENV_VAR"
      ]
    }
  }
}

이 자동 감지 및 포함은 Turborepo가 앱이 빌드된 프레임워크를 성공적으로 추론하는 경우에만 작동합니다. 또한 환경 변수는 해당 프레임워크가 사용되는 워크스페이스의 작업에 대한 캐시 키에만 포함됩니다. 즉, Next.js 앱에 대해 추론된 환경 변수는 Next.js 앱으로 감지된 워크스페이스의 캐시 키에만 포함됩니다. 모노레포의 다른 워크스페이스 작업은 영향을 받지 않습니다.

예를 들어, Next.js 프로젝트, Create React App 프로젝트 및 TypeScript 패키지의 세 가지 워크스페이스가 있는 모노레포를 생각해봅시다. 각각 build 스크립트가 있고 두 앱 모두 TypeScript 프로젝트에 의존합니다. 이 Turborepo에 모두 순서대로 빌드하는 표준 turbo.json 파이프라인이 있다고 가정해봅시다:

Turborepo logo
turbo.json
{
  "pipeline": {
    "build": {
      "dependsOn": ["^build"]
    }
  }
}

1.4부터 turbo run build를 실행하면 Turborepo는 TypeScript 패키지를 빌드할 때 빌드 타임 환경 변수를 고려하지 않습니다. 그러나 Next.js 앱을 빌드할 때 Turborepo는 NEXT_PUBLIC_으로 시작하는 환경 변수가 .next 폴더의 출력을 변경할 수 있다고 추론하여 해시 계산 시 포함합니다. 마찬가지로 Create React App의 build 스크립트의 해시를 계산할 때 REACT_APP_PUBLIC_으로 시작하는 모든 빌드 타임 환경 변수가 포함됩니다.

프레임워크별 해시 특정성의 이러한 개선은 최적이고 안전하며 정확한 캐싱을 향한 중요한 단계입니다.

eslint-config-turbo

Turborepo 캐시가 모든 환경에서 올바르게 공유될 수 있도록 추가적인 편집기 내 지원을 제공하기 위해 새로운 ESLint 설정을 만들었습니다. 새로운 해싱 알고리즘이 대부분의 프레임워크에서 대부분의 상황을 다루어야 하지만, 이 ESLint 설정은 프레임워크 접두사가 없지만 빌드 출력에 영향을 미치는 다른 빌드 타임 인라인 환경 변수를 사용하는 팀과 자동으로 감지할 수 없는 자체 내부 프레임워크를 사용하는 팀에게 편집기 내 피드백을 제공합니다.

시작하려면 루트 eslintrc 파일에서 eslint-config-turbo를 확장하세요:

.eslint.config.js
{
  // turbo.json에서 누락된 환경 변수를 자동으로 플래그 지정
  "extends": ["next/core-web-vitals", "turbo"]
}

규칙에 대한 더 많은 제어를 원하는 경우 - 먼저 플러그인에 추가한 다음 원하는 규칙을 구성하여 eslint-plugin-turbo 플러그인을 직접 설치하고 구성할 수 있습니다:

.eslint.config.js
{
  "extends": ["next/core-web-vitals"],
  "plugins": ["turbo"],
  "rules": {
    // turbo.json에서 누락된 환경 변수를 자동으로 플래그 지정
    "turbo/no-undeclared-env-vars": "error"
  }
}

이 플러그인은 turbo.json에 선언되지 않은 프레임워크와 관련되지 않은 환경 변수를 코드에서 사용하고 있는 경우 경고합니다.

1.4.x부터 모든 예제와 npx create-turbo를 통해 생성된 새 프로젝트에 eslint-config-turbo를 포함합니다.

ESLint 설정 및 플러그인에 대한 자세한 내용은 ESLint 문서를 참조하세요.

새로운 프레임워크 및 라이브러리 예제

여러분의 피드백과 제안을 바탕으로 Turborepo를 워크플로우에 통합하기 위한 새로운 예제를 만들었습니다:

기타 버그 수정 및 개선 사항

커뮤니티

6월에 Turborepo v1.3을 출시한 이후 놀라운 채택률과 커뮤니티 성장을 보았습니다:

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

이 릴리스는 다음 분들의 기여로 제공되었습니다: @B2o5T, @chitchu, @elis, @gsoltis, @harshcut, @jaredpalmer, @kocisov, @nathanhammond, @neolivz, @NuroDev, @oneezy, @samouri, @shayc, @StevenMatchett, @tknickman, @trevorr, @zsoldosp 등 더 많은 분들!

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