- vừa được xem lúc

Nx Workspace - Anh Cả trong việc xây dựng frontend architecture

0 0 85

Người đăng: Huỳnh Trọng Thoại

Theo Viblo Asia

Chào anh em bạn hữu gần xa. Rãnh rỗi quá không biết làm gì nên chia sẻ cho anh em xíu về System Design. Mình khuyến khích anh em nên tìm hiểu vì nó là một kĩ năng để giúp anh em có thể bay cao, bay xa hơn đấy 😏

Hôm nay, mình sẽ giới thiệu qua một build tools giúp các bạn có thể xây dựng một MonoRepo cho project của mình và doanh nghiệp.

MonoRepo & Micro Frontends?

  • Monorepo: là kiểu cấu trúc project trong đó tất cả module (hoặc project con) đều nằm trong cùng 1 git repository. image.png

  • Micro frontends: là kiểu cấu trúc mà có nhiều codebase, và trên từng codebase chỉ quản lý một tính năng cụ thể mà thôi. image.png

Mặc dù hiện tại, Micro Frontends nổi lên như là một giải pháp hàng đầu trong việc build tools phía frontend. Tuy nhiên, với quan điểm của mình thì MonoRepo vẫn là một giải pháp an toàn và tiết kiệm chi phí đối với các start-up và doanh nghiệp nhỏ.

Trong đó, Nx và Lerna trở thành đối thủ nặng kí trong việc xây dựng ứng dụng MonoRepo.

Nx & Lerna

Trước hết, ta so sánh hai ông kẹ này nhá

  • Lerna
    • Nó tập trung vào việc liên kết nhiều packages từ cùng một dự án và quản lý xuất bản npm.
    • Nó phù hợp hơn với các dự án open source với nhiều packages (vì chúng ta có thể dễ dàng xuất bản các gói của mình).
  • Nx
    • Nó tập trung vào việc quản lý quy trình phát triển cho nhiều packages. Nghĩa là chúng ta có thể xác định các cấu hình về runner và builder cho project, theo cách tương tự như Webpack.
    • Bên cạnh đó, nó cũng có thể hoạt động để sinh ra nhiều process cùng một lúc. Ví dụ như việc chạy frontend và backend cùng lúc mà không cần mở hai terminal khác nhau. Tương tự với docker-composer.
    • Nó phù hợp hơn để xử lý các quy trình công việc phức tạp với nhiều packages

Khi sử dụng khái niệm mono-repo, chúng ta hình dung ra trải nghiệm của nhà phát triển phong phú hơn nhiều, không chỉ đơn giản là sắp xếp một vài dự án song song với nhau. Đó là lý do tôi chọn NX để phát triển.

🌯 Cài đặt

Đầu tiên, chúng tôi sẽ cài đặt Nx Editor Plugins. Nó giúp chúng tôi quản lý tất cả các dự án với phần mở rộng một cách hiệu quả. Tham khảo: https://nx.dev/using-nx/console#nx-console-for-vscode

Screen Shot 2022-03-10 at 4.32.41 PM.png

Lưu ý rằng, chúng ta cần tạo đúng mục đích để tránh dư thừa trong code. Bên cạnh đó, tag cũng không thể thiếu nha. Nếu bạn muốn chạy task runner, bạn chỉ cần chú ý đến tệp ** project.json **.

Tệp ** project.json **

🔎 Application (/apps) là gì?

Đây là nơi chỉ chứa mã của các nền tảng: web, desktop, backoffice,... Nó có thể cấu hình dependency injection và kết nối các libs.

Ví dụ: chúng ta sẽ chọn:

  • NextJS cho web:
    • Cung cấp SEO
    • Customized Open Graph.
    • Nâng cao performance (Fast refresh).
  • Electron cho desktop.

Screen Shot 2022-03-10 at 4.56.36 PM.png

Quy tắc:

  • Không chứa business logic, components, services.
  • Chỉ những thư viện mới được phép imported.

❤️‍🔥 Libs (/libs) là gì?

Cơ bản, libs là nơi để chứa các services, components, utils,... Một Nx workplace điển hình sẽ có nhiều libs hơn apps. Vì thế,chúng ta nên đặc biệt cẩn thận trong việc tổ chức thư mục libs này.

Theo kinh nghiệm của mình thì chúng ta nên chia libs theo scopetype vì:

  • Dễ dàng maintain cũng như scale sản phẩm.
  • Dựa trên concept của micro frontends (thằng nào chỉ làm nhiệm vụ của thằng đó).

Ví dụ:

  • scope-client: represent web, desktop.
  • scope-client-lib: dependencies (/libs) of each apps.
  • scope-shared: common dependencies of the whole project like ui-kit, services, packages.
  • type-feature
  • type-package
  • type-util
  • type-ui: only UI-kit.
  • type-shell: config for the root of the app like ThemeProvider, Store, ex.
  • type-service

Screen Shot 2022-03-10 at 5.19.09 PM.png

Chạy scripts như thế nào?

  • Install: yarn install
  • Web:
    • dev: yarn web:serve
    • build: yarn web:build
  • Desktop:
    • dev: yarn desktop:serve
    • build: yarn desktop:build

Bên cạnh đó, chúng ta có thể sử dụng Nx commands để chạy scripts tức thì (Vscode) Screen Shot 2022-03-10 at 5.30.44 PM.png

❤️‍🔥 Dep graph

Đây là một tính năng siêu hữu ích của Nx. Nó cho chúng ta một góc nhìn tổng quan toàn bộ project. Từ đó, ta có thể hạn chế được dependency injection.

Chạy scripts:

  • yarn dep-graph.
  • yarn affected:dep-graph

Screen Shot 2022-03-10 at 5.33.14 PM.png

Tổng kết

Nx tuy không phải là mới nhưng mình biết có rất nhiều anh em lập trình FE vẫn chưa biết nó là gì.

Hy vọng qua bài viết này, mọi người đã có một xíu kiến thức về việc chọn một tools để xây dựng một project của team mình. Từ đó, chúng ta có thể dễ dàng bắt đầu con đường tìm hiểu về cách xây dựng một project thế nào là chuẩn, thế nào là phù hợp với nhân lực hay tham vọng của công ty.

Mình là Thoại - một dev quèn thôi

Mọi thắc mắc xin liên hệ: https://www.facebook.com/tieunais/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Những điều cần lưu ý và sử dụng Hook trong React (Phần 5)

V. Sử dụng useRef như thế nào cho đúng.

0 0 127

- vừa được xem lúc

7 Cách viết code React "clean" hơn

Mở đầu. Là nhà phát triển React, tất cả chúng ta đều muốn viết code sạch hơn, đơn giản hơn và dễ đọc hơn. 1. Sử dụng JSX shorthands.

0 0 188

- vừa được xem lúc

Create app covid-19 use Reactjs

Chào các bạn hôm nay mình sẽ chia sẻ với các bạn một app covid-19, để mọi người cùng tham khảo, tính năng của App này chỉ đơn giản là show số liệu về dịch Covid của các nước trên thế giới như: Số ngườ

0 0 39

- vừa được xem lúc

ReactJS Custom Hooks

ReactJS cung cấp rất nhiều cho bạn các hook mà bạn có thể sử dụng hằng ngày vào project của mình. Nhưng bên cạnh đó bạn có thể tự tạo ra các hook của riêng bạn để sử dụng, làm cho việc tối ưu hóa code

0 0 65

- vừa được xem lúc

3 cách để tránh re-render khi dùng React context

3 cách để tránh re-render khi dùng React context. Nếu đã từng sử dụng React context cho dự án của bạn, và gặp phải tình trạng các component con - Consumer re-render rất nhiều lần, thậm chí bị sai logi

0 0 25

- vừa được xem lúc

Tìm hiểu về React Hook: Sử dụng useDebugValue

Trong bài viết hôm này, tôi sẽ giới thiệu các bạn một React Hook tiếp theo, đó là useDebugValue. useDebugValue là gì .

0 0 45