Monorepo (một repository cho nhiều dự án/dịch vụ) và polyrepo (một repository riêng cho mỗi dự án) là hai chiến lược để tổ chức mã xuyên nhiều dự án. Mỗi cái có các đánh đổi đáng kể ảnh hưởng đến cộng tác, công cụ và mở rộng — hiểu chúng cung cấp thông tin cho các quyết định kiến trúc quan trọng.
Monorepo — một repo cho mọi thứ
Nhiều dự án/dịch vụ/thư viện trong MỘT repository duy nhất:
✓ Mã/thư viện DÙNG CHUNG dễ dùng và refactor (một nơi, các thay đổi atomic)
✓ Các commit ATOMIC xuyên các dự án (đổi một API và tất cả người dùng của nó cùng nhau)
✓ Công cụ, version hóa, CI thống nhất; các chuẩn nhất quán; dễ thấy xuyên dự án
✓ Quản lý dependency đơn giản hóa (một phiên bản của mã dùng chung)
✗ Repo có thể trở nên KHỔNG LỒ (cần công cụ mở rộng — sparse checkout, build caching)
✗ Cần công cụ build/CI tinh vi (Nx, Turborepo, Bazel) để hiệu quả
✗ Truy cập rộng; CI phải thông minh (chỉ build cái đã thay đổi)
→ Được dùng bởi Google, Meta, v.v. (với đầu tư công cụ nặng).
