Trang chủ Kiến Thức Công Nghệ pnpm là gì? So sánh npm, yarn và pnpm
Công Nghệ

pnpm là gì? So sánh npm, yarn và pnpm

Chia sẻ
pnpm là gì? So sánh npm, yarn và pnpm
Chia sẻ

Trong quá trình phát triển các dự án, việc quản lý packages là phần quan trọng để đảm bảo hoạt động trơn tru, ổn định. pnpm đang thu hút nhiều sự chú ý bởi các developer nhờ tiết kiệm dung lượng đĩa và tăng tốc độ xử lý.

Vậy pnpm là gì, và nó có phải là trình quản lý gói hiệu quả nhất cho Nodejs? Hãy cùng mình tìm hiểu về pnpm, những ưu điểm của mà nó mang lại là gì nhé.

1. Package manager là gì?

Trước khi đi vào chi tiết về pnpm, bạn cần hiểu rõ vai trò của các trình quản lý gói trong quá trình phát triển phần mềm. Các công cụ này giúp tự động hóa quá trình cài đặt, cập nhật và quản lý các thư viện bên ngoài (packages) trong một dự án. Nhờ đó, developer có thể tận dụng mã nguồn đã được viết sẵn, thay vì phải viết lại từ đầu, giúp tăng năng suất và chất lượng mã.

Mặc dù npm và yarn đã có mặt trong nhiều năm, nhưng chúng không phải là không có nhược điểm:

  • Sử dụng không hiệu quả dung lượng ổ đĩa: khi cài đặt các dự án lớn với nhiều gói phụ thuộc, node_modules có thể trở nên rất lớn.
  • Thời gian cài đặt lâu: với các dự án có nhiều gói, việc cài đặt có thể mất nhiều thời gian.
  • Xung đột phiên bản: quản lý các phiên bản khác nhau của cùng một gói trong các dự án phức tạp có thể gây ra xung đột.

2. pnpm là gì?

pnpm là viết tắt của “Performant npm”, là một package manager (quản lý gói) với mục tiêu là cải thiện hiệu suất và tiết kiệm dung lượng ổ đĩa. Ý tưởng của pnpm là sử dụng content-addressable store để lưu trữ các gói, giúp nó trở nên hiệu quả trong việc quản lý dung lượng đĩa và tốc độ, đặc biệt đối với các dự án lớn có nhiều thư viện phụ thuộc lẫn nhau.

Không giống như npm và yarn, nơi mà các gói bị sao chép vào từng thư mục node_modules của mỗi dự án, thay vì sao chép gói, pnpm lưu trữ chúng ở một vị trí toàn cục trên máy. Khi một dự án yêu cầu một package cụ thể, pnpm sử dụng hard-link từ store tới thư mục node_modules của dự án. Điều này giúp giảm đáng kể dung lượng ổ đĩa sử dụng vì các gói dùng chung không bị lưu trữ nhiều lần.

3. Các tính năng nổi bật của pnpm

3.1 Tiết kiệm dung lượng ổ đĩa

Một trong những điểm mạnh nhất của pnpm là khả năng tiết kiệm dung lượng ổ đĩa. Các công cụ quản lý gói truyền thống như npm và yarn sao chép các gói vào từng dự án, dẫn đến việc lặp lại nhiều lần nếu cùng một gói được sử dụng ở nhiều dự án.

pnpm khắc phục điều này bằng cách sử dụng một store lưu trữ toàn cục, đảm bảo rằng mỗi thư viện chỉ lưu trữ một lần duy nhất trên ổ đĩa của bạn, dù có bao nhiêu dự án sử dụng nó. Nên thư mục node_modules nhỏ hơn nhiều, đặc biệt là khi bạn làm việc với nhiều dự án có các thư viện phụ thuộc giống nhau.

saving disk space

3.2 Tốc độ cài đặt nhanh

Vì pnpm liên kết cứng các gói từ store toàn cục, quá trình cài đặt diễn ra nhanh hơn rất nhiều. pnpm không cần phải tải lại hay sao chép gói mỗi lần cài đặt cho một dự án mới, giúp giảm thiểu việc sử dụng mạng và CPU.

Ngoài ra, pnpm còn tối ưu hóa việc cài đặt các thư viện phụ thuộc ngang hàng (peer dependencies), giúp xử lý nhanh hơn so với các trình quản lý gói khác, vốn thường gặp phải các xung đột hoặc chậm trễ khi xử lý các thư viện này.

boosting installation speed

3.3 Quản lý gói nghiêm ngặt

pnpm quản lý cấu trúc node_modules của dự án. Mỗi gói (ví dụ như express) chỉ có thể sử dụng những thư viện phụ thuộc mà nó đã yêu cầu và khai báo rõ ràng trong tệp package.json. Khác với cách mà npm và yarn – thường cho phép các gói truy cập vào các thư viện gián tiếp được cài đặt thông qua một gói khác. Sự nghiêm ngặt này giúp dự án của bạn trở nên dễ bảo trì hơn và tránh những phụ thuộc ẩn khó phát hiện.

quản lý packages nghiêm ngặt

Ví dụ, nếu express cần dùng thư viện cookie, thì cookie phải được khai báo là phụ thuộc của express. pnpm sẽ đảm bảo rằng express chỉ có thể truy cập cookie mà không truy cập được bất kỳ thư viện nào khác nếu chúng không được khai báo. Điều này giúp ngăn chặn việc sử dụng các thư viện phụ thuộc một cách gián tiếp.

3.4 Deterministic installations

pnpm cung cấp tính năng deterministic installations, nghĩa là cấu trúc của thư mục node_modules sẽ giống nhau mỗi khi bạn cài đặt, bất kể môi trường nào.

Quan trọng khi sử dụng các đường dẫn triển khai CI/CD. Với file khóa pnpm-lock.yaml, pnpm đảm bảo rằng các thư viện phụ thuộc luôn nhất quán.

4. So sánh npm, yarn và pnpm

Dưới đây là bảng so sánh ngắn gọn giữa npm, yarn và pnpm

pnpm npm Yarn
Sử dụng dung lượng đĩa Sử dụng liên kết cứng, tránh trùng lặp Sao chép gói vào từng dự án Giảm bớt trùng lặp
Tốc độ (Khi cài đặt lại) Nhanh: Sử dụng store toàn cục Chậm: Tải lại và sao chép gói Nhanh hơn npm nhưng chậm hơn pnpm
Quản lý phụ thuộc Ngăn truy cập vào các phụ thuộc chưa khai báo Cho phép truy cập vào các phụ thuộc chưa khai báo Giống như npm
Hỗ trợ Monorepo Hỗ trợ tích hợp với pnpm workspaces Cần công cụ bên ngoài để quản lý monorepo Hỗ trợ monorepo với yarn workspaces
Cài đặt nhất quán Đảm bảo cài đặt nhất quán giữa các môi trường Không phải lúc nào cũng nhất quán Đảm bảo cài đặt nhất quán với lockfile

5. Hướng dẫn cài đặt và sử dụng pnpm

5.1 Cài đặt pnpm

  • Using Corepack: chạy lệnh sau (nhớ cấp quyền nhé):

Bash

corepack enable pnpm
  • Using npm

Bash

npm install -g pnpm

5.2 Sử dụng pnpm

pnpm cung cấp các lệnh tương tự như npm, nên các bạn rất dễ dàng nhớ

  • Cài đặt gói:

Bash

pnpm install <package_name>
  • add package:

Bash

pnpm add <package_name>
  • remove package:

Bash

pnpm remove <package_name>

6. Khi nào nên sử dụng pnpm

  • Với các dự án lớn hoặc monorepo có nhiều phụ thuộc, pnpm giúp tiết kiệm dung lượng và quản lý phụ thuộc hiệu quả.
  • Nếu bạn muốn tránh xung đột phiên bản và đảm bảo môi trường nhất quán.
  • Khi bạn ưu tiên tốc độ cài đặt và hiệu suất
  • Bạn cần cân nhắc điều này: một số packages hoặc công cụ có thể không tương thích hoàn toàn với cấu trúc node_modules của pnpm.

7. Kết luận

Với những cải tiến về hiệu suất, tiết kiệm dung lượng và tính nghiêm ngặt trong quản lý gói, pnpm là lựa chọn tuyệt vời cho những dự án Nodejs lớn đặc biệt đối với các dự án monorepo.

Các bài viết liên quan:

  • Gitignore là gì? Vì sao nên sử dụng .gitignore trong dự án Git?
  • Swagger là gì? Hướng dẫn Sử dụng Swagger cơ bản
  • NodeJS là gì? Tại sao NodeJS lại phổ biến
  • Microservices là gì? So sánh Microservices và Monolithic
Bài viết cùng chuyên mục
Tối ưu ứng dụng với cấu trúc dữ liệu cơ bản và bitwise
Công Nghệ

Tối ưu ứng dụng với cấu trúc dữ liệu cơ bản và bitwise

Trong bài viết này, 200Lab sẽ chia sẻ những trường hợp dễ...

Công Nghệ

So sánh Flutter vs React Native: Framework nào đáng học năm 2021

Điểm chung của Flutter, React Native đều là Cross-platform Mobile, build native...

HTTP/2 là gì? So sánh HTTP/2 và HTTP/1
Công Nghệ

HTTP/2 là gì? So sánh HTTP/2 và HTTP/1

Từ khi Internet ra đời, sự phát triển về các giao thức...

Upload File từ Frontend đến Backend mà rất nhiều bạn vẫn đang làm sai!!
Công Nghệ

Upload File từ Frontend đến Backend mà rất nhiều bạn vẫn đang làm sai!!

1. Client encode file (base64) rồi gởi về backend 200Lab đã từng...

Công Nghệ

React Native – Hướng dẫn làm việc với Polyline và Animated-Polyline trên Map

Vẽ đường đi trên bản đồ là một nghiệp vụ vô cùng...

Công Nghệ

Hybrid App và Native App: Những khác biệt to lớn

Bất cứ khi nào một công ty quyết định làm ứng dụng...

Web/System Architecture 101 – Kiến trúc web/hệ thống cơ bản cho người mới
Công Nghệ

Web/System Architecture 101 – Kiến trúc web/hệ thống cơ bản cho người mới

Đây là một kiến trúc cơ bản mà bất kì một người...

Công Nghệ

Tư duy kiến trúc thông qua các trò chơi mà rất nhiều bạn không biết

Tư duy kiến trúc là gì? Tư duy kiến trúc có thể...