Bạn đã bao giờ gặp tình huống này chưa? Để tiết kiệm không gian máy tính, bạn đặt store của pnpm trên ổ cứng ngoài, nhưng một ngày nọ bạn không mang theo ổ cứng, hoặc muốn đổi vị trí lưu trữ, và pnpm bắt đầu báo lỗi không tìm thấy thư mục? Thậm chí cắm ổ cứng lại cũng thấy lạ lạ?
Thực ra điều này liên quan đến nguyên lý hoạt động độc đáo của pnpm. Hôm nay chúng ta hãy nói về cơ chế “Store” của pnpm, và làm thế nào để cứu vãn khi nó bị “mất kết nối”!
pnpm thực sự tiết kiệm không gian như thế nào?
Trước khi bắt đầu sửa chữa, hãy cùng ôn lại một chút về phép thuật tiết kiệm không gian của pnpm.
Khác với npm sao chép một bộ đầy đủ các gói vào node_modules của mỗi dự án, pnpm sử dụng Content-addressable store (Kho lưu trữ theo địa chỉ nội dung) và Hard Links (Liên kết cứng).
Cách hoạt động của pnpm là tất cả các tệp gói thực sự chỉ tồn tại trong một “kho lớn” nào đó trên máy tính của bạn, và thư mục dự án của bạn chỉ liên kết đến kho này mà thôi. Điều này không chỉ tiết kiệm không gian ổ cứng mà còn giúp cài đặt nhanh đến kinh ngạc.
| Mục | pnpm | npm |
|---|---|---|
| Phương thức lưu trữ | Global Store + Hard Links | Sao chép độc lập mỗi dự án |
| Chiếm dụng không gian | Rất thấp (chỉ lưu một bản sao mỗi phiên bản) | Cao (sao chép lặp lại) |
| Tốc độ cài đặt | Nhanh (chỉ cần tạo liên kết) | Chậm (cần giải nén và ghi) |
Tại sao ổ cứng ngoài lại gây ra lỗi pnpm?
Khi bạn đặt pnpm store trên ổ cứng ngoài để tiết kiệm không gian SSD cục bộ, những cái bẫy tiềm ẩn sẽ xuất hiện:
| Tình huống | Mô tả |
|---|---|
| Đường dẫn không hợp lệ | Khi không cắm ổ cứng, pnpm không tìm thấy store-dir đã thiết lập ban đầu, và quá trình cài đặt sẽ báo lỗi và thoát ngay lập tức. |
| Hard Link sụp đổ | Vì Hard Links không thể vượt qua phân vùng (Partition), nếu dự án của bạn ở Ổ A và kho ở Ổ B, pnpm sẽ bị buộc phải sử dụng cách sao chép, điều này làm mất đi ưu điểm ban đầu, thậm chí có thể gây ra lỗi thực thi do đường dẫn cache bị lộn xộn. |
Gặp tình huống này, chúng ta cần “hiệu chỉnh” lại thủ công.
Giải pháp 1: Hiệu chỉnh, Cấu hình lại Đường dẫn Store
Nếu bạn quyết định thay đổi vị trí store, cách trực tiếp nhất là nói cho pnpm biết kho mới ở đâu. Bạn có thể sử dụng lệnh sau:
pnpm config set store-dir <đường_dẫn_thư_mục_mới_của_bạn>
Ví dụ thiết lập pnpm store tại ~/.pnpm-store dưới thư mục home của người dùng:
pnpm config set store-dir ~/.pnpm-store
Nếu bạn không chắc chắn store hiện tại được thiết lập ở đâu, bạn có thể truy vấn trước:
pnpm store path
Sau khi thiết lập hoàn tất, pnpm sẽ biết từ nay phải lấy gói ở đâu.
Giải pháp 2: Làm lại từ đầu, Xây dựng lại Liên kết
Đôi khi sau khi đổi đường dẫn, dự án vẫn còn một số lỗi tàn dư cũ. Lúc này “làm lại từ đầu” thường là liều thuốc hiệu quả nhất:
| Bước | Mô tả |
|---|---|
| 1 | Xóa thư mục node_modules trong dự án. |
| 2 | Xóa pnpm-lock.yaml (nếu là lỗi lạ do đường dẫn gây ra, khuyên bạn nên tạo lại cả file khóa). |
| 3 | Chạy pnpm install để xây dựng lại liên kết. |
Điều này sẽ buộc pnpm kéo lại các liên kết chính xác từ store vào dự án của bạn dựa trên cấu hình mới nhất.
Phân bổ thế nào cho mượt nhất?
Nếu bạn thường xuyên chuyển đổi giữa các môi trường khác nhau, hoặc lo lắng về sự không ổn định của ổ cứng ngoài, cấu hình lý tưởng là: Giữ pnpm store trên SSD cục bộ, và mã dự án có thể để trên ổ cứng ngoài.
Tại sao? Vì store thường không thay đổi quá thường xuyên, và mặc dù có thể tích lớn, nhưng tổng cộng phân tán trên các dự án thực sự nhỏ hơn nhiều so với npm. Giữ kho trên đường dẫn cục bộ ổn định (ví dụ mặc định macOS ~/Library/pnpm/store) giúp bạn khởi tạo dự án mới ở nơi khác một cách suôn sẻ ngay cả khi không mang theo ổ cứng ngoài.
Khái niệm phát triển Stateless (Không trạng thái) này làm cho môi trường phát triển của bạn linh hoạt hơn!
Kết luận: Giữ Store ổn định là bớt rắc rối
Chìa khóa để quản lý pnpm store nằm ở hai chữ “ổn định”. Nếu bạn gặp vấn đề về đường dẫn, bạn có thể làm như sau:
| Bước | Mô tả |
|---|---|
| 1 | Trước tiên kiểm tra và thay đổi thiết lập store-dir. |
| 2 | Dọn dẹp các gói cũ: pnpm store prune (cái này giúp bạn xóa các file gói không ai dùng, giúp ổ cứng thon gọn hơn) |
| 3 | Cài đặt lại các gói pnpm install |
Hy vọng bài viết này giúp mọi người thoát khỏi cái hố đường dẫn pnpm và tận hưởng niềm vui phát triển tốc độ cao!