For the complete documentation index, see llms.txt. This page is also available as Markdown.

Filtering Workspaces

Hướng dẫn sử dụng --filter trong Turborepo — lọc package theo tên, thư mục, source control changes, kết hợp filters và advanced patterns.

--filter cho phép chạy tasks trên một subset của monorepo, thay vì toàn bộ. Kết hợp với caching, đây là công cụ mạnh để tối ưu CI và dev workflow.

1. Filter theo package name

turbo build --filter=@repo/web
turbo build --filter=@repo/ui

2. Filter theo thư mục

# Tất cả package trong apps/
turbo build --filter="./apps/*"

# Tất cả package trong packages/utilities/
turbo lint --filter="./packages/utilities/*"

3. Bao gồm dependencies (suffix ...)

Chạy task cho package và dependencies của nó:

turbo dev --filter=web...

Thứ tự: dependencies → web (theo đúng task graph).

4. Bao gồm dependents (prefix ...)

Chạy task cho package và các package phụ thuộc vào nó:

Hữu ích khi sửa ui — kiểm tra xem web, docs có bị ảnh hưởng không.

5. Filter theo source control changes

Bắt buộc wrap trong []:

Turborepo tính diff files giữa 2 mốc, map vào packages, chỉ chạy task cho packages có thay đổi.

6. Direct task filtering (từ v2.2.4)

Không cần --filter, filter trực tiếp trong lệnh:

7. Kết hợp nhiều filters

Multiple filters = union (OR):

Task graph sẽ include packages thỏa mãn bất kỳ filter nào.

8. Advanced Patterns

Exclude packages

Filter by git changes + dependencies

9. Use Cases

Mục đích
Lệnh

Build toàn bộ

turbo build

Chỉ 1 app

turbo build --filter=@repo/web

App + dependencies

turbo build --filter=@repo/web...

Library + tất cả app dùng nó

turbo build --filter=...@repo/ui

Chỉ package thay đổi từ commit trước

turbo build --filter=[HEAD^1]

Chỉ package thay đổi trong PR

turbo build --filter=[main...HEAD]

CI: affected packages + dependents

turbo build --filter=[main...HEAD]...

10. CI Workflow Example

fetch-depth: 0 cần thiết để git diff hoạt động chính xác.

11. Lưu ý

  • Filter vs Cache: filter giới hạn entrypoints vào task graph. Nếu package A phụ thuộc B, filter A → B vẫn chạy (nếu dependsOn yêu cầu)

  • Dùng caching + Remote Cache để package không thay đổi vẫn hit cache dù không bị filter

  • Filter source control yêu cầu full git history trong CI

Tài liệu tham khảo

Cập nhật lần cuối