Turbo
아직 정식 릴리즈를 하지 않았지만 주목해야할 프로젝트 입니다.
Webpack의 계승자로 자처하며, rust 기반의 번들링 툴체인을 제공합니다.
monorepo와 같은 환경에서 패키지 단위의 캐슁을 하는 turborepo와 번들러 레벨에서 속도와 캐슁 등을을 하는 turbopack 으로 나눌 수 있습니다.
조만간 이 두 도구는 turbo
라는 이름으로 통합합니다.
Turborepo
다음은 turborepo가 동작하는 방식 입니다.
- workspace 내의 git이 관리하는 파일들에 대한 hash 값을 생성
./node_modules/.cache/turbo/
디렉터리에서 동일한 hash 값을 가지는 cache가 있는지 확인- cache missing일 경우, 명령 실행
- 생성하는 파일과 로그를 모두 저장
Remote Caching은 서로 다른 빌드 머신에서 캐슁 정보를 공유할 수 있게 해 줍니다.
Polyrepo는 workspace의 패키지를 npm으로 publish 하고 버전 업데이트 후 빌드하는 방식 입니다.
Monorepo는 수정만으로 의존 관계에 있는 패키지 업데이트를 적용할 수 있습니다.
@manypkg/cli는 monorepo에서 설치한 패키지의 다른 버전을 동일하게 맞추어 줍니다.
Turbopack
Turbopack은 webpack을 계승하는 번들러 입니다. 퍼포먼스 향상을 위해 Rust 언어로 만들고 있습니다. javascript webpack plugin을 지원하지 않습니다. 다만, 많이 사용하는 webpack plugin을 rust로 포팅하고 있습니다.
vite는 dev 환경에서, 번들링 없이 es module 기술을 사용하여 수정한 파일을 업데이트 합니다. 이러한 이유로, 대규모 애플리케이션에서는 각 파일을 로드하는 시간이 증가합니다.
turbopack은 webpack과 동일하게 dev server를 사용합니다.
vite
가 사용하는 esbuild
는 HMR 기능이 없고 캐슁 기능이 약합니다.
따라서, rust를 기반으로 대규모 애플리케이션에 적합한 incremental 빌드를 지원합니다.
Lazy bunding 기술로 특정 라우트에 필요한 모듈만 로드할 수 있습니다.
이는 vite
가 사용하는 native ESM을 활용해서 해결할 수 없는 기능입니다.
- Native ESM으로 해결할 수 없는 bundler 기능 제공 (HMR, 대규모 애플리케이션)
- Incremental computation
- Lazy bundling
향후에 turbopack
과 turborepo
는 turbo
라는 툴로 통합합니다.