Turborepo
JavaScript/TypeScript Monorepo를 위한 빠른 빌드 시스템
Features
- Vercel이 인수
- JavaScript/TypeScript Monorepo를 위한 빠른 빌드 시스템
- 프론트엔드 에는 모노레포가 생산성에 좋지만, 툴링이 복잡했기에 그걸 개선한 도구
- 인크리멘털 빌드 지원
- 타임스탬프가 아닌 콘텐츠를 인식하는 해슁
- 리모트 캐슁으로 동료 및 CI/CD 시스템이 더 빠르게 빌드 가능
- 모든 코어를 사용하는 병렬 실행
- 런타임코드 / 소스맵을 건드리지 않는 Zero Runtime Overhead
- 모노레포에서 특정 타겟용 서브셋만 생성해서 PaaS 배포를 빠르게
- Task Pipelines : 태스크 간에 연결을 정의해서 빌드를 언제 어떻게 실행할지 최적화
Turborepo가 Go에서 Rust로 마이그레이션하는 이유
"Turborepo가 Go에서 Rust로 마이그레이션하는 이유" by Vercel
- Turborepo 는 JavaScript / TypeScript 를 위한 고성능 빌드 시스템
- 증분빌드, 병렬실행, 리모트 캐쉬(Vercel 인프라 사용)등을 이용해서 성능 향상 시도
- 처음에는 좋은 성능을 보여준 esbuild 을 쫒아 만들어짐
- Turbo 패키지로 Rust 로 작성 된 Turbopack 과 코드 베이스가 합쳐짐
- Go 언어가 서버 개발에서 보여주는 장점과 빌드 도구를 만들 때 요구 되는 점이 다름을 느낌
- Go: goroutine 모델, Context API 및 서버 인프라의 표준 라이브러리에 집중
- Rust: Process management, Filesystem, Low-level OS concepts, 사용자 컴퓨터에 배포하기
- 강력한 에코 시스템, 다양하고 좋은 crate (패키지) 가 이미 많음
- C/C++ 라이브러리를 가져다 쓰기에 Go 에 비해서 간단하고 빠름
- Turbopack 과 같은 코드 베이스로 간다면 유지 보수, 코드 공유등에서 장점
- Rust 가 개발자들을 행복하게 만들 주고 따라서 여러가지 긍정정 효과를 가져다 줌
- 현재는 “Rust-Go-Rust” 구조로 사용 되지만 계속 마이그레이션 될 것
Monorepo Projects
- Monorepo
- Bazel (by Google) - A fast, scalable, multi-language and extensible build system.
- Gradle (by Gradle, Inc) - A fast, flexible polyglot build system designed for multi-project builds.
- Lage (by Microsoft) - Task runner in JS monorepos
- Lerna - A tool for managing JavaScript projects with multiple packages.
- Nx (by Nrwl) - Next generation build system with first class monorepo support and powerful integrations.
- Rush (by microsoft) - Geared for large monorepos with lots of teams and projects. Part of the Rush Stack family of projects.
- Turborepo (by Vercel) - The high-performance build system for JavaScript & TypeScript codebases.
- Pants
- Earthly