
Turbo hay Turborepo là hệ thống build monorepo mã nguồn mở được Vercel phát triển, viết bằng Rust để đạt tốc độ cao nhất. Trong môi trường JavaScript và TypeScript hiện đại, monorepo ngày càng phổ biến nhưng việc quản lý hàng tá package trong cùng một repo đặt ra thách thức lớn về thời gian build. Turborepo giải quyết vấn đề này bằng cơ chế caching thông minh, chạy parallel trên mọi CPU core, và zero-config cho npm scripts hiện có.

Turbo là gì và tại sao cần monorepo build system?
Trước khi Turborepo xuất hiện, các dự án monorepo JavaScript thường dùng Lerna (ra mắt 2015) hoặc webpack để quản lý nhiều package. Tuy nhiên, cả hai đều có điểm yếu: Lerna không caching hiệu quả, cấu hình webpack phức tạp và chậm khi project lớn.
Turborepo xuất hiện với triết lý khác: chỉ chạy những task bị ảnh hưởng bởi thay đổi. Thay vì rebuild toàn bộ project mỗi lần commit, Turborepo hash nội dung file, so sánh với cache, và skip các task không thay đổi. Kết quả thực tế từ Vercel cho thấy: build từ 340 giây giảm xuống còn 80ms khi cache hit.
>> FULL TURBO — minh họa tốc độ caching vượt trội” width=”900″ height=”337″>
Các tính năng chính của Turborepo
Content-based caching
Mỗi task được hash dựa trên: nội dung source file, biến môi trường, dependency versions, và config. Nếu hash không đổi, Turborepo phục hồi output từ cache thay vì chạy lại. Cơ chế này hoạt động cả ở local và remote.
Remote Cache (chia sẻ cache)
Vercel Remote Cache cho phép team chia sẻ cache giữa các developer và CI/CD pipeline. Khi một người build xong, người khác pull cache — CI không bao giờ phải làm lại cùng một công việc hai lần.
Parallel execution
Turborepo xây dựng task graph từ dependency của workspace, sau đó chạy các task song song trên mọi CPU core có sẵn, vẫn tuân thủ thứ tự phụ thuộc. Ví dụ: nếu package B phụ thuộc package A, thì A build xong trước B chạy.
Zero-config integration
Turborepo hoạt động với scripts trong package.json và config workspace có sẵn. Chỉ cần thêm file turbo.json là chạy, không cần rewrite cấu trúc project.
Multi-package manager
Hỗ trợ tất cả package manager phổ biến: npm, yarn, pnpm, và Bun. Dễ dàng chuyển đổi giữa các package manager mà không thay đổi cách Turborepo hoạt động.
Cách Turborepo hoạt động
Quy trình hoạt động của Turborepo gồm 4 bước cơ bản:
- Bước 1 — Xây dựng task graph: Phân tích dependency giữa các package trong workspace để tạo đồ thị thực thi.
- Bước 2 — Hashing: Mỗi task được mã hóa hash từ source files, dependencies, env vars và config.
- Bước 3 — Kiểm tra cache: So hash với local cache. Nếu trùng → phục hồi output, skip execution. Nếu không → lên lịch chạy.
- Bước 4 — Parallel execution: Các task chưa cache chạy song song trên mọi core, tuân thủ dependency DAG.
Với Remote Cache, kết quả cũng được đẩy lên server Vercel để team chia sẻ.
Cấu hình turbo.json cơ bản
File cấu hình chính là turbo.json. Dưới đây là ví dụ minimal:
{
"$schema": "https://turborepo.dev/schema.json",
"tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": [".next/**", "!.next/cache/**", "dist/**"]
},
"test": {},
"lint": {}
}
}
Trong đó:
dependsOn: ["^build"]— task build chạy sau khi build các package phụ thuộc (symbol^)outputs— danh sách thư mục được cache. Nếu không khai báo, task vẫn chạy nhưng không cache output.testvàlint— không phụ thuộc task nào, chạy song song hoàn toàn.
So sánh Turborepo với Nx và Lerna
| Tiêu chí | Turborepo | Nx | Lerna |
|---|---|---|---|
| Ngôn ngữ | Rust | TypeScript | TypeScript (powered by Nx) |
| GitHub Stars | ~31,000 | ~29,280 | ~36,000 |
| Phiên bản mới nhất | 2.10.12 | 23.1.2 | 10.0.1 |
| Caching | Local + Remote (Vercel) | Local + Nx Cloud | Local + Distributed |
| Plugin system | Minimal (extenders) | Rich plugin ecosystem | Powered by Nx plugins |
| Publish npm packages | Không (dùng tool riêng) | Có (nx release) | Có (core strength) |
| Học curve | Thấp, zero-config | Cao hơn, nhiều tính năng | Trung bình |
Turborepo tập trung vào tốc độ và minimal config — phù hợp nếu bạn chỉ cần caching + parallel execution. Nx là nền tảng monorepo đầy đủ hơn (code generation, affected analysis, plugins) nhưng phức tạp hơn. Lerna (2015) giờ được Nrwl duy trì, sử dụng Nx làm backend, mạnh nhất trong việc publish npm packages.
Các công ty sử dụng Turborepo
Theo showcase chính thức, Turborepo được sử dụng bởi nhiều công ty công nghệ lớn: AWS, Microsoft, Netflix, Disney, GitHub, Linear, Adobe, PayPal, Shopify, Datadog, Twilio, Twitch, Xiaomi và hàng trăm tổ chức khác.
Điều này cho thấy Turborepo đã trở thành chuẩn mực cho monorepo JavaScript/TypeScript trong môi trường sản xuất.
Cài đặt và bắt đầu nhanh
# Cài đặt (package manager bất kỳ)
npm install turbo --save-dev
# Hoặc
pnpm add turbo -Dw
# Khởi tạo cấu hình
npx turbo init
# Chạy task
npx turbo build
npx turbo test lint
Turborepo tự động phát hiện cấu trúc workspace từ package.json và pnpm-workspace.yaml, yarn workspaces, hoặc npm workspaces. Chỉ cần chạy turbo init là có thể bắt đầu caching ngay lập tức.
Khi nào nên dùng Turborepo?
- Monorepo nhiều package: Khi bạn có 3+ packages xây dựng thường xuyên, Turborepo giúp tiết kiệm thời gian đáng kể.
- CI/CD chậm: Remote Cache giúp CI không build lại những gì đã cache, giảm thời gian pipeline từ phút xuống giây.
- Nhóm phát triển lớn: Nhiều người cùng commit, cache chia sẻ tránh trùng lặp work.
- Đang dùng Lerna/Webpack: Dễ dàng migrate — Turborepo hoạt động bên cạnh hệ thống hiện có, không cần bỏ đi.
Hạn chế cần lưu ý
- Không publish packages: Turborepo chỉ chạy tasks, không hỗ trợ publish lên npm. Bạn cần dùng changeset hoặc lerna publish riêng.
- Plugin system hạn chế: Nếu cần code generation, scaffolding phong phú như Nx, Turborepo có thể chưa đủ.
- Remote Cache cần Vercel account: Remote cache miễn phí cho open source, nhưng private project cần tài khoản Vercel.
Tóm lại, Turborepo là lựa chọn tối ưu cho monorepo JavaScript/TypeScript muốn tối đa tốc độ build mà không cần cấu hình phức tạp. Với cơ chế caching content-based và chạy parallel bằng Rust, nó biến những project build vài phút thành vài milliseconds khi cache hit.
Nguồn tham khảo:
