Get in touch
or send us a question?
CONTACT

Ưu và nhược điểm của Monorepos, được giải thích

Bạn có nên giữ tất cả mã của mình trong một thư mục duy nhất không?

Monorepo là gì?

Như tên cho thấy, Monorepo (kho lưu trữ đơn) là một mẫu kiến ​​trúc trong đó một kho lưu trữ duy nhất sẽ chứa tất cả mã cho một dự án nhất định.

Nói cách khác, bạn có thể có nhiều ứng dụng trong một repo. Bạn có thể có cơ sở mã trang web, cơ sở mã ứng dụng dành cho thiết bị di động, v.v. trong một repo duy nhất. Hoặc bạn cũng có thể có một repo duy nhất chứa nhiều mô-đun khác nhau của một ứng dụng phức tạp, trong đó mỗi mô-đun là một ứng dụng riêng biệt.

Monorepo so với Multirepo

Như tôi đã nói trước đây, Monorepo giữ mọi thứ trong một repo duy nhất. Mặt khác, Multirepo (hay còn gọi là Polyrepo), có một kho lưu trữ cho mỗi dự án. Nếu có bốn dự án, sẽ có bốn kho.

Ưu điểm của việc sử dụng Monorepo

Sử dụng mô hình kiến ​​trúc Monorepo có một số lợi thế. Hãy xem xét chúng:

  • Một nguồn sự thật – Thay vì có nhiều kho lưu trữ với các cấu hình riêng của chúng, chúng ta có thể có một cấu hình duy nhất để quản lý tất cả các dự án, giúp việc quản lý dễ dàng hơn.
  • Sử dụng lại mã – Nếu có một mã chung hoặc một mã phụ thuộc phải được sử dụng trong các dự án khác nhau, chúng tôi thực sự có thể chia sẻ chúng một cách dễ dàng.
  • Tính minh bạch – Nó cho chúng ta khả năng hiển thị của mã được sử dụng trong mọi dự án. Chúng tôi sẽ có thể kiểm tra tất cả các mã ở một nơi duy nhất.
  • Thay đổi nguyên tử – Chúng tôi có thể thực hiện một thay đổi duy nhất và phản ánh những thay đổi trong tất cả các gói, do đó làm cho việc phát triển nhanh hơn nhiều.

Khi có ưu điểm thì cũng cần có nhược điểm. Hãy xem xét một số nhược điểm:

  • Không thể hạn chế quyền truy cập – Mọi thành viên có quyền truy cập vào kho sẽ có quyền truy cập để xem tất cả mã. Không có cách nào để hạn chế một số phần của ứng dụng không liên quan đến người dùng.
  • Thời gian xây dựng lâu – Vì có nhiều mã ở một nơi nên thời gian xây dựng lâu hơn nhiều so với việc xây dựng các dự án riêng biệt một cách độc lập.
  • Hiệu suất Git – Vì toàn bộ mã nằm ở một nơi và vì nhiều nhà phát triển cam kết và làm việc cùng nhau trên cùng một repo, nên có rất nhiều cam kết được Git theo dõi. Vì số lượng cam kết là rất lớn, hiệu suất của Git trở nên chậm chạp khi lịch sử ngày càng sâu sắc.

Rất nhiều công ty hàng đầu sử dụng Monorepo. Một số trong số chúng bao gồm:

  • Google
  • Facebook
  • Microsoft
  • Uber
  • Airbnb
  • Twitter

Các công cụ Monorepo cung cấp một số chức năng, chẳng hạn như khởi động và liên kết các gói cục bộ với nhau, xây dựng mã, xác thực chúng, xuất bản chúng lên sổ đăng ký gói, v.v. Một số công cụ phổ biến nhất là:

  • Lerna – Lerna là một công cụ được sử dụng để quản lý các dự án JS với nhiều gói. Nó được xây dựng trên Yarn.
  • Bazel – Bazel là một hệ thống xây dựng monorepo do Google xây dựng.
  • Yarn – Yarn là một công cụ quản lý phụ thuộc JS cũng hỗ trợ monorepos thông qua không gian làm việc .
  • NX – NX là một bộ công cụ dành cho nhà phát triển có thể mở rộng cho monorepos.
  • RushJS – RushJS là một công cụ khác hỗ trợ toàn bộ vòng đời của monorepos. Nó được phát triển bởi Microsoft.

Monorepos chỉ là một công cụ có ưu điểm cũng như nhược điểm riêng. Trên thực tế, cách tiếp cận này chắc chắn đã làm cho cuộc sống của các nhà phát triển trở nên dễ dàng hơn khi so sánh với Multirepo. Tuy nhiên, nó vẫn còn những vấn đề mà tôi hy vọng sẽ được giải quyết trong tương lai.

Tôi tin rằng tôi đã giải thích một chút về Monorepo và bây giờ, bạn đã hiểu rõ về cách hoạt động của nó. Theo mình, việc bạn có nên sử dụng nó hay không còn tùy thuộc vào ứng dụng mà bạn đang xây dựng. Nếu có nhiều điểm chung phụ thuộc và nếu bạn cần chia sẻ mã, đây sẽ là một cách tiếp cận tốt. Dù sao, tôi sẽ để lại câu trả lời này cho bạn, vì nó hoàn toàn phụ thuộc vào nhu cầu ứng dụng của bạn.