Nâng CaoBuild Tools iconBuild Tools

Monorepo là gì? Công cụ phổ biến để quản lý monorepo?

Monorepo chứa nhiều packages/apps trong một repo — Turborepo/Nx cho task orchestration với caching (chỉ rebuild package thay đổi); pnpm workspaces là package manager tốt nhất cho monorepo.

  • Monorepo là single repository chứa nhiều packages/apps — ngược với polyrepo (mỗi service có repo riêng).
  • Lợi ích: code sharing dễ dàng (shared UI library, utils), atomic commits across packages (thay đổi API và consumer trong một commit), unified tooling và CI, dễ refactor cross-package.
  • Task orchestration: Turborepo và Nx chạy tasks (build, test, lint) song song và theo dependency order — nếu package B depends on package A, A phải build trước B.
  • Affected commands: Nx có nx affected --target=test chỉ chạy tests cho packages bị ảnh hưởng bởi changes — critical cho CI performance trong large monorepos.
  • Caching: Turborepo cache build outputs locally và remotely (Vercel Remote Cache) — nếu inputs không thay đổi, reuse cache thay vì rebuild; có thể chia sẻ cache giữa developers và CI.
  • Internal packages: packages/ui, packages/utils không publish lên npm, chỉ dùng trong repo — workspace:* protocol trong pnpm để reference.
  • Versioning: Changesets tool quản lý versioning và changelogs cho publishable packages.
  • Trade-offs monorepo: repo size lớn, CI phức tạp hơn, cần tooling investment; polyrepo dễ hơn cho independent teams và deployments.
  • Turborepo vs Nx: Turborepo đơn giản hơn, Nx có nhiều features hơn (generators, devtools, cloud).

Xem toàn bộ Build Tools cùng filter theo level & chủ đề con.

Mở danh sách Build Tools