Turborepo 1.7

Wednesday, January 11th, 2023
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
Chris Olszewski
Name
Chris Olszewski
Nicholas Yang
Name
Nicholas Yang
X
@nicholaslyang

Turborepo 1.7은 작업에 더 많은 명확성을 제공하여 개발자 경험을 개선하는 데 중점을 둡니다:

npm install turbo@latest를 실행하거나 전역으로 설치 NEW하고 set-default-outputs codemod를 실행하여 오늘 업데이트하세요.

자신있게 장기 실행 작업 예약

실행되지 않는 작업을 초래할 수 있는 잘못된 구성을 방지하기 위해 이제 persistent: true 구성 옵션을 사용하여 자체적으로 종료되지 않는 작업(dev 스크립트 등)에 대해 Turborepo에 알릴 수 있습니다. 이 구성이 작업에 설정되면 Turborepo는 다른 작업이 이 작업에 종속될 수 없도록 보장합니다. 이는 dev 작업이나 --watch 플래그가 있는 테스트 러너에 유용합니다.

Turborepo logo
turbo.json
{
	"pipeline": {
		"dev": {
+			"persistent": true
		}
	}
}

이전에는 작업 B가 persistent 작업 A에 종속된 경우 작업 A가 종료되지 않았기 때문에 작업 B는 실행되지 않았습니다. 작업 Apersistent로 선언하면 Turborepo가 이 오류 시나리오가 발생하지 않도록 방지합니다.

이 릴리스 이전에는 persistent 작업에 대해 turbo run <task> --parallel 사용을 권장해 왔습니다. --parallel을 사용하면 turbo가 종속성 그래프를 무시하고 모든 작업을 한 번에 실행합니다.

--parallel이 유용한 탈출구를 제공했지만 사용자는 작업이 무엇인지 선언하는 대신 Turborepo에 작업을 어떻게 실행할지 알려야 했습니다.

전체 토폴로지 종속성 그래프를 버리는 대신 Turborepo가 종속성 그래프를 유지하면서 persistent: true로 종료되지 않는 프로세스에 종속되지 않도록 보장하는 것이 훨씬 더 정확합니다.

전역 turbo

turbo를 전역으로 설치하면 프로젝트의 어디에서나 Turborepo 작업을 실행할 수 있습니다. 이를 위해 다음을 사용하세요:

Terminal
npm install turbo --global

turbo는 이제 모든 프로젝트에서 작동합니다. 로컬 turbo 버전을 찾기 위해 turbo는 현재 디렉토리에서 항상 위쪽으로 몇 가지 단계를 거칩니다:

  1. 가장 가까운 turbo.json을 찾습니다.
  2. 찾지 못하면 workspaces 속성이 있는 첫 번째 package.json을 찾습니다.
  3. 찾지 못하면 첫 번째 package.json을 찾습니다.

전역으로 설치된 turbo 버전은 로컬로 설치된 turbo 버전이 존재하지 않거나 찾을 수 없는 경우에만 사용됩니다.

turbo-inference

turbo --versionturbo bin은 작업을 실행할 turbo 사본의 버전과 바이너리 위치를 각각 표시합니다. 또한 -vv 또는 --verbosity=2로 실행하면 로컬 또는 전역 turbo가 사용되는지 항상 표시됩니다.

Terminal
turbo --version --verbosity=2
2023-01-11T10:49:04.042-0500 [DEBUG] turborepo_lib::shim: No local turbo binary found at: /Users/knickman/Developer/vercel/my-awesome-monorepo/node_modules/.bin/turbo
2023-01-11T10:49:04.042-0500 [DEBUG] turborepo_lib::shim: Running command as global turbo
1.7.0

명확성 향상을 위해 outputs 선언

이전에는 작업에 대한 outputs 키를 지정하지 않으면 Turborepo가 자동으로 dist/build/ 디렉토리의 모든 파일을 캐시하려고 시도했습니다.

이는 특정 프레임워크의 build 작업에는 잘 작동했지만 이 암시적 동작은 모든 작업에 적용되므로 잘 확장되지 않았습니다. Turborepo를 사용하는 많은 개발자, 팀, 프로젝트 및 코드베이스에서 dist/build/ 디렉토리를 자동으로 캐시하는 가정이 사용자에게 문제를 일으키고 있다는 것을 발견했습니다.

버전 1.7에서는 이 동작이 제거되었으며 이제 turborepo에 캐시할 내용을 명시적으로 알려야 합니다.

Turborepo logo
turbo.json
{
  "pipeline": {
    "build": {
+     "outputs": ["dist/**", "build/**"]
    }
  }
}

1.7 미만 버전의 Turborepo에서 기본 캐시 출력에 의존하고 있었다면 @turbo/codemod set-default-outputs codemod를 실행하여 동일한 동작을 얻을 수 있습니다:

Terminal
npx @turbo/codemod set-default-outputs

또한 아무것도 캐시하지 않는 것이 이제 기본 동작이므로 더 이상 outputs: []를 지정할 필요가 없습니다. codemod는 작업에서 이 구성도 제거합니다.

더 조용한 로그를 위한 "오류만" 출력 모드

오류에 대한 가시성을 제공하기 위해 커뮤니티 멤버 @dobesv작업 실행의 모든 로그 대신 오류만 표시하는 솔루션을 기여했습니다. 파이프라인을 디버깅하는 동안 --output-logs=errors-only를 사용하여 신호 대 잡음비를 높게 유지하여 파이프라인의 성공적인 실행을 보장하는 데 집중할 수 있습니다. 이는 구성 옵션 또는 CLI 플래그로 사용할 수 있습니다

Terminal
turbo build --output-logs=errors-only

커뮤니티

Turborepo v1.6을 출시하고 Turbopack과 병합한 이후 놀라운 채택률과 커뮤니티 성장을 보았습니다:

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

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