Cộng đồng Upskills
Upskills
upskills.dev
Tham gia cộng đồng Discord để được hỗ trợ về các bài hướng dẫn và đặt câu hỏi.
Vu Nguyen
@nphivu414
Theo dõi tôi trên X để nhận cập nhật và tin tức mới nhất về Upskills.
Đâ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
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/│ │ └── feature-settings/│ ├── ui/ # Shared UI components│ │ └── src/│ │ ├── button/│ │ ├── card/│ │ └── modal/│ ├── shared/ # Shared types, utils, constants│ │ └── src/│ │ ├── types/│ │ ├── utils/│ │ └── constants/│ └── db/ # Database layer│ └── src/│ ├── prisma/│ └── queries/│├── tools/ # Custom scripts and generators├── nx.json # NX workspace configuration├── tsconfig.base.json # Path aliases configuration└── package.json # Dependencies and scripts
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! Trong phần này, chúng ta sẽ tìm hiểu 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, nơi chúng ta 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
Phần 1: Giới Thiệu về NX Monorepos
Về tác giả
NAB, Software Engineer
Hi, I'm Vu, a Software Engineer at NAB (National Australia Bank) with a love for creating web and mobile apps that don't just look cool but feel great to use. I've had the chance to work with some awesome companies over the years, picking up new tricks and tackling many kinds of challenges along the way.
Now, I'm thrilled to share what I've learned and help others through fun, interactive coding tutorials!