Chương 1: NX Monorepo Guide
Đây là phần trong series của mình về modern tooling cho indie full-stack developers. Mình xây dựng các side projects để tiếp tục trau dồi kỹ năng trong thời đại AI, và mình muốn chia sẻ những gì đã học để tất cả chúng ta có thể tiếp tục build những thứ thú vị cùng nhau.
Trong bài hướng dẫn này, chúng ta sẽ khám phá NX monorepos, một tool rất mạnh để giúp structure codebase cho việc scale, maintain, và build development workflow hiệu quả.
Yêu cầu
Nội dung bài hướng dẫn
7 phần • khoảng 1 giờ 30 phút
Chào mừng bạn đến với Phần 1 của series NX Monorepo! Phần này cover các concepts nền tảng và architecture patterns để xây dựng fullstack monorepos có khả năng scale. Phần 2 sẽ là walkthrough thực hành, xây dựng một repository hoàn chỉnh từ đầu.
Quyết Định Chiến Lược Repository
Khi quản lý nhiều projects liên quan, các team thường chọn giữa hai chiến lược:
Polyrepo (các repository riêng biệt): Mỗi project nằm trong repository riêng với versioning độc lập, CI/CD, và release cycles. Phù hợp cho người mới và team nhỏ khi mới bắt đầu.
Monorepo (một repository duy nhất): Tất cả các projects liên quan chia sẻ một repository, cho phép chia sẻ code và thay đổi atomic trên toàn bộ codebase.
Các công ty như Google, Meta, Microsoft, và nhiều công ty khác sử dụng monorepos để quản lý các codebases khổng lồ của họ. Nhưng monorepos không chỉ dành cho big tech—chúng ngày càng phổ biến với các team thuộc mọi quy mô.
Tại Sao Chọn Monorepo?
| Khía Cạnh | Polyrepo | Monorepo |
|---|---|---|
| Chia Sẻ Code | Publish packages lên npm, quản lý versions | Import trực tiếp, luôn đồng bộ |
| Thay Đổi Cross-project | Nhiều PRs trên các repos | Một commit atomic duy nhất |
| Cập Nhật Dependencies | Cập nhật từng repo riêng | Một cập nhật, tất cả projects |
| Tooling & Config | Duplicate trên các repos | Chia sẻ, thiết lập nhất quán |
| Refactoring | Cần phối hợp phức tạp | IDE hỗ trợ, tức thì |
Vấn Đề: Monorepos Thiếu Tooling Phù Hợp
Chỉ đơn giản gom tất cả code vào một repository (code collocation) là không đủ. Thiếu tooling phù hợp, monorepos trở nên khó quản lý:
Đây là lý do tại sao nhiều team từ bỏ monorepos—không phải vì monorepos tệ, mà vì họ thiếu tooling phù hợp.
NX: Giúp Monorepos Scale Hiệu Quả
NX được tạo ra để giải quyết chính xác những vấn đề này. Nó biến một code collocation đơn giản thành một true monorepo với tooling thông minh:
Cách NX Giải Quyết Mỗi Thách Thức:
1. Task Caching — Không bao giờ rebuild code không thay đổi
2. Affected Commands — Chỉ chạy những gì cần thiết
3. Module Boundaries — Thực thi các quy tắc kiến trúc
4. Dependency Graph — Hiểu codebase của bạn
nx graph5. Consistent Tooling — Plugins và Generators
Chia sẻ với mọi người
Về tác giả
NAB, Lead Engineer
Mình là Vũ, hiện là Lead Engineer ở NAB (National Australia Bank). Mình bắt đầu ở mảng Home Lending, giờ đang lead một team làm sản phẩm cho HICAPS, dịch vụ point-of-sale claiming bảo hiểm sức khỏe tư nhân lớn nhất ở Úc. Trước NAB, mình từng làm ở các startup và nhiều team khác với đa dạng stack.
Upskills là nơi mình chia sẻ những kiến thức thực tế từ công việc, để giúp bạn build và ship dự án tốt hơn. Ngoài tutorial, sắp tới sẽ có thêm nhiều nội dung: project showcase, interview prep, và các AI tool, như những resource cho hành trình học của bạn. Mình rất vui được chia sẻ những kiến thức và kinh nghiệm đã học được trong suốt quá trình làm việc, và có thể chia sẻ thêm nhiều điều thú vị cùng nhau khi chúng ta tiếp tục build những thứ hay ho.
Các bài deep-dive về web development thực tế, một đến hai tuần một số, viết bởi engineer thực sự có kinh nghiệm build sản phẩm. Không sáo rỗng, không câu view.
Chúng tôi tôn trọng quyền riêng tư. Hủy đăng ký bất cứ lúc nào.
monorepo/├── apps/ # Thin, deployable entry points│ ├── web-app/ # Main Web App│ ├── mobile-app/ # Main Mobile app│ ├── api-server/ # Nodejs Backend API│ └── admin-dashboard/ # Admin App│├── libs/ # Where the actual code lives│ ├── web-modules/ # App-specific feature modules│ │ └── src/│ │ ├── feature-auth/│ │ ├── feature-dashboard/