Turborepo + pnpm: Combo “quyền năng” giúp quản lý Monorepo mượt mà hơn

Development tutorial - IT technology blog
Development tutorial - IT technology blog

Bạn đã bao giờ phát điên vì quản lý hàng chục Repository rời rạc?

Hãy tưởng tượng bạn đang ôm đồm 3 dự án: một web app, một trang admin và một hệ thống API. Mỗi lần sửa một hàm tiện ích (utils) hay một UI component dùng chung, bạn lại phải mở 3 cửa sổ IDE, copy-paste code rồi hì hục cập nhật từng cái. Quá mất thời gian! Monorepo sinh ra chính là để kết thúc nỗi đau đó.

Nói một cách thực dụng, Monorepo gom tất cả project và package về chung một “nhà”. Tuy nhiên, nếu chỉ bỏ chung folder mà không có công cụ điều phối, mọi thứ sẽ sớm thành một mớ hỗn độn. Đó là lý do chúng ta cần pnpm để quản trị thư viện và Turborepo để tăng tốc độ thực thi.

Triển khai Monorepo trong 5 phút

Thay vì ngồi nghe lý thuyết suông, hãy bắt tay vào làm ngay một dự án mẫu. Bạn mở terminal và gõ:

npx create-turbo@latest

Lúc này, hãy chọn pnpm khi được hỏi về package manager. Sau khi cài đặt, cấu trúc dự án của bạn sẽ trông như thế này:

  • apps/: Nơi chứa các sản phẩm chính như web, dashboard hoặc blog.
  • packages/: Kho chứa các thư viện dùng chung như UI, Config, Utils.
  • turbo.json: Bản đồ chỉ đường cho Turborepo biết cách vận hành dự án.

Chỉ cần chạy lệnh pnpm dev, Turborepo sẽ tự động kích hoạt chế độ phát triển cho toàn bộ ứng dụng cùng lúc. Cảm giác cực kỳ chuyên nghiệp và gọn gàng.

Tại sao pnpm và Turborepo là “cặp bài trùng”?

pnpm – Tiết kiệm hàng chục GB ổ cứng

npm hay yarn thường tạo ra những folder node_modules nặng nề. Với pnpm, cơ chế “Content-addressable store” chỉ lưu một bản copy của mỗi thư viện duy nhất trên ổ cứng. Thực tế, khi mình chuyển từ npm sang pnpm cho một repo gồm 5 project React, dung lượng lưu trữ đã giảm từ 2GB xuống chỉ còn hơn 400MB. Trong Monorepo, tính năng Workspaces của pnpm giúp các project con kết nối với nhau mà không cần đẩy code lên npm registry.

Turborepo – Đừng bao giờ làm lại việc đã xong

Nếu pnpm lo phần “tài sản”, thì Turborepo là người điều hành sản xuất. Vũ khí mạnh nhất của nó là Caching. Nếu code của ứng dụng A không thay đổi, Turborepo sẽ lấy kết quả từ lần build trước đó chỉ trong vài mili giây.

Trong một dự án thực tế với 5 developer, mình đã tích hợp quy trình này và kết quả thật bất ngờ. Thời gian build trên hệ thống CI/CD giảm từ 10 phút xuống còn chưa đầy 2 phút nhờ cơ chế cache thông minh. Bạn không còn phải ngồi chờ đợi vô nghĩa cho những dòng code vốn dĩ chẳng hề thay đổi.

Chia sẻ code: Sửa một nơi, cập nhật mọi nơi

Cái hay nhất là bạn có thể tạo một package UI dùng chung cho cả Web và Admin. Giả sử bạn có packages/ui chứa các button tùy chỉnh. Để dùng nó trong apps/web, bạn chỉ cần khai báo trong file package.json:

{
  "dependencies": {
    "@repo/ui": "workspace:*"
  }
}

Dấu workspace:* là tín hiệu báo cho pnpm: “Hãy ưu tiên lấy bản mới nhất ngay trong repo này”.

Cấu hình Pipeline linh hoạt

Bạn cần dạy cho Turborepo biết thứ tự công việc qua file turbo.json:

{
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "dist/**"]
    },
    "lint": {},
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}

Ký tự ^ mang ý nghĩa cực kỳ logic: Phải build xong mọi dependencies thì mới được build chính nó. Hệ thống sẽ luôn chạy đúng trình tự mà bạn không cần can thiệp thủ công.

3 bí kíp để quản lý Monorepo mượt mà

Dưới đây là những kinh nghiệm “xương máu” mình đúc kết được:

  1. Sử dụng Filter: Đừng bao giờ build cả repo nếu bạn chỉ sửa mỗi app Web. Hãy dùng lệnh: pnpm build --filter=web để tiết kiệm thời gian.
  2. Chia nhỏ Package: Thay vì tạo một cục utils khổng lồ, hãy tách thành utils-auth, utils-api. Việc này giúp cache hoạt động chính xác hơn, tránh việc sửa code auth mà hệ thống lại phải build lại cả phần api.
  3. Kích hoạt Remote Caching: Khi làm việc nhóm, hãy dùng Vercel Remote Cache. Nếu đồng nghiệp đã build xong trên máy họ, máy bạn sẽ tải luôn kết quả đó về. Đây thực sự là một cuộc cách mạng về năng suất làm việc nhóm.

Chuyển đổi sang Monorepo có thể khiến bạn hơi bối rối trong vài ngày đầu. Tuy nhiên, một khi đã quen với tốc độ và sự ngăn nắp này, bạn sẽ không bao giờ muốn quay lại cách quản lý rời rạc trước đây. Chúc bạn xây dựng được những hệ thống tối ưu và bền vững!

Share: