Mục lục
- pnpm là gì?
- Cách thức hoạt động của pnpm
- 2.1 Cài đặt một gói
- 2.2 Kho lưu trữ toàn cục
- 2.3 Cách truy cập gói
- Đặc điểm nổi bật của pnpm
- 3.1 Tốc độ nhanh hơn
- 3.2 Tiết kiệm dung lượng
- 3.3 Giảm xung đột
- Các lệnh chính của pnpm
- Kết luận
- Tài liệu tham khảo
1. pnpm là gì?
pnpm là một công cụ quản lý gói dành cho các dự án web. Nó giúp quản lý tất cả các phụ thuộc của dự án một cách tối ưu và hiệu quả hơn. Chữ "p" trong pnpm đại diện cho performance, cho thấy rằng công cụ này được thiết kế để cải thiện hiệu suất.
2. Cách thức hoạt động của pnpm
Để hiểu rõ hơn về cách hoạt động của pnpm, chúng ta hãy xem xét một ví dụ thực tế:
2.1 Cài đặt một gói
Giả sử bạn muốn cài đặt một gói trong dự án của mình, chẳng hạn như lodash.
lodash là một gói chứa các hàm tiện ích rất phổ biến, sẽ là ví dụ tốt cho trường hợp này.
Bạn chỉ cần chạy lệnh: pnpm add lodash
pnpm sẽ tìm kiếm gói này trên internet, tải về và cài đặt, đồng thời tạo ra tệp package.json
để quản lý tất cả các phiên bản phụ thuộc.
2.2 Kho lưu trữ toàn cục
Điều đặc biệt ở pnpm là thay vì lưu trữ gói trong thư mục dự án, nó sẽ tạo ra một kho lưu trữ toàn cục. Đây là một vị trí trên máy tính của bạn nơi lưu trữ tất cả các phụ thuộc với các phiên bản tương ứng. Ví dụ, trên Windows, kho lưu trữ này có thể nằm ở: C:\Users\TênNgườiDùng\AppData\Local\pnpm\store
.
Giả sử bạn có 10 dự án trong máy tính cần sử dụng lodash. Nếu bạn sử dụng npm, bạn sẽ phải tải xuống gói này 10 lần (1 lần cho mỗi dự án), điều này gây lãng phí tài nguyên.
pnpm chỉ tải xuống một lần và bạn có thể sử dụng nó cho bất kỳ dự án nào cần, vì vậy pnpm hiệu quả hơn rất nhiều so với các công cụ quản lý gói khác.
2.3 Cách truy cập gói
Để truy cập các gói, pnpm sử dụng một hệ thống liên kết, tương tự như các lối tắt trên màn hình máy tính của bạn.
Tất cả các gói sẽ được lưu trữ ở một vị trí, trong kho lưu trữ toàn cục, và pnpm tạo ra một liên kết giữa dự án của bạn và kho lưu trữ đó. Nếu 10 dự án khác nhau đều cần lodash, 10 liên kết sẽ được tạo ra cho gói này, giúp quản lý gói hiệu quả hơn và làm cho thư mục node_modules
nhẹ hơn.
Giải thích về quy trình nội bộ của pnpm ở trên là một cách đơn giản nhưng đủ để hiểu tại sao pnpm là một công cụ tốt hơn. Có nhiều quy trình khác để giải thích trường hợp các gói có phiên bản khác nhau hoặc nếu các phụ thuộc có phụ thuộc riêng của chúng.
3. Đặc điểm nổi bật của pnpm
3.1 Tốc độ nhanh hơn
Việc không cần tải xuống gói cho từng dự án mà có thể tái sử dụng phụ thuộc nhiều lần khiến pnpm rất hiệu quả về thời gian.
3.2 Tiết kiệm dung lượng
Với việc chỉ cần tải xuống gói một lần, dung lượng lưu trữ mà các phụ thuộc chiếm sẽ giảm, dẫn đến thư mục node_modules
nhẹ hơn.
3.3 Giảm xung đột
Bằng cách sử dụng các liên kết để truy cập gói, pnpm ít có khả năng gặp xung đột giữa các phụ thuộc hơn.
4. Các lệnh chính của pnpm
Sau khi hiểu rõ tại sao pnpm lại là một công cụ tuyệt vời, hãy xem một số lệnh hữu ích của nó:
// Tạo tệp package.json
pnpm init
// Cài đặt tất cả các phụ thuộc
pnpm install
// Cài đặt một phụ thuộc
pnpm add <tên_gói>
// Cài đặt một phụ thuộc phát triển
pnpm add -D <tên_gói>
// Xóa một phụ thuộc
pnpm remove <tên_gói>
// Cài đặt một phụ thuộc toàn cục
pnpm add -g <tên_gói>
// Liệt kê tất cả các phụ thuộc
pnpm list
// Cập nhật một phụ thuộc
pnpm update <tên_gói>
// Liệt kê tất cả các gói có bản cập nhật
pnpm outdated
5. Kết luận
pnpm là một công cụ quản lý gói hiện đại giúp đơn giản hóa việc quản lý phụ thuộc trong các dự án web của chúng ta. Nó dễ sử dụng và rất giống với npm, vì vậy việc chuyển đổi sang pnpm không hề khó khăn.
Tôi khuyến khích các bạn sử dụng pnpm trong dự án của mình vì những lợi ích về lưu trữ và tốc độ mà nó mang lại.
6. Tài liệu tham khảo
- dev.to - pnpm là gì?
- medium.com - Tại sao chúng ta nên sử dụng pnpm?
- dev.to - pnpm có thật sự nhanh và tiết kiệm không?
Các bài viết khác mà bạn có thể quan tâm:
CSS hiện đại: Có điều kiện if trong CSS? 🤔
Cristian Fernando ・ 25 tháng 6
#frontend #css #html #webdev
Khẳng định hằng số trong TypeScript 🤔
Cristian Fernando ・ 3 tháng 9
#webdev #typescript #spanish #programming
Paracetamol.ts💊| #44: Giải thích mã TypeScript này
Cristian Fernando ・ 1 tháng 9
#javascript #typescript #spanish #webdev