Công cụ phát triển

pnpm là gì? Vì sao pnpm có thể tiết kiệm dung lượng và cài dependency nhanh hơn npm?

pnpm là package manager cho JavaScript với cơ chế lưu trữ chung, giúp giảm dung lượng đĩa và tăng tốc cài đặt so với npm.

Xuất bản: 16 thg 6, 2026Cập nhật: 16 thg 6, 2026Thời gian đọc: 10 minLượt xem: 4
npmpnpmnodejspackage managerdependency

💡Điểm chính của bài viết

  • pnpm là package manager cho JavaScript với cơ chế lưu trữ chung, giúp giảm dung lượng đĩa và tăng tốc cài đặt so với npm.

Chủ đề được phát triển từ video người dùng cung cấp về npmpnpm. Bài viết này không chỉ tóm tắt video, mà mở rộng thành một bài phân tích kỹ thuật có nguồn rõ ràng, ảnh minh họa dạng PNG công khai, không dùng ảnh base64 và không dùng SVG.


Thông tin nhanh

Chủ đề: npm, pnpm, Node.js package manager, node_modules, dependency storage
Ý chính: npm và pnpm đều dùng để quản lý package trong hệ sinh thái JavaScript/Node.js, nhưng pnpm có cách lưu trữ dependency khác: thay vì để mỗi dự án giữ một bản sao riêng của cùng một package, pnpm lưu nội dung package vào một kho chung theo nội dung rồi liên kết vào từng dự án.
Kết luận ngắn: pnpm không làm ứng dụng chạy nhanh hơn trực tiếp, nhưng có thể làm quá trình cài đặt dependency nhanh hơn, tiết kiệm ổ đĩa hơn và giúp dependency trong dự án rõ ràng hơn.


Ảnh minh họa 1: npm trong hệ sinh thái Node.js

npm logo
npm logo

Nguồn ảnh: Dashboard Icons / Homarr Labs, file PNG công khai.
URL ảnh trực tiếp: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/npm.png
Trang nguồn: https://dashboardicons.com/icons/npm
Ghi chú giấy phép: Dashboard Icons là bộ icon mã nguồn mở, thường được phân phối qua GitHub/jsDelivr; nên kiểm tra lại giấy phép repo trước khi dùng cho mục đích thương mại.
Ghi chú kỹ thuật: Ảnh được chèn bằng URL .png, không dùng base64 và không dùng SVG.


Video đang nói về vấn đề gì?

Video giải thích một vấn đề quen thuộc của lập trình viên Node.js: khi có nhiều dự án cùng dùng một thư viện, ví dụ express, mỗi dự án thường có thư mục node_modules riêng. Nếu dùng npm theo cách thông thường, mỗi dự án sẽ có một cây dependency riêng. Điều này dễ làm ổ đĩa phình to, đặc biệt khi máy có nhiều dự án frontend/backend, nhiều repo thử nghiệm, hoặc nhiều monorepo.

Video đưa ra mô hình: hai dự án cùng dùng express, mỗi dự án lại kéo theo nhiều dependency con. Nếu mỗi dự án giữ một bản sao riêng, tổng dung lượng có thể bị nhân lên. Con số “~70% disk saved” trong video nên hiểu là minh họa cho khả năng tiết kiệm đáng kể, không nên coi là một tỷ lệ cố định áp dụng cho mọi dự án.

Về mặt chính thức, npm mô tả npm install là lệnh cài một package và các package mà nó phụ thuộc, đồng thời mặc định cài các module được liệt kê trong package.json vào thư mục node_modules của dự án. Npm cũng tạo package-lock.json để ghi lại cây dependency chính xác nhằm giúp các lần cài sau tái tạo cùng một cây dependency.
Nguồn: npm Docs — npm install, package-lock.json

  • https://docs.npmjs.com/cli/v8/commands/npm-install/
  • https://docs.npmjs.com/cli/v8/configuring-npm/package-lock-json/

Ảnh minh họa 2: pnpm nhấn mạnh tốc độ và tiết kiệm dung lượng

pnpm fast illustration
pnpm fast illustration

Nguồn ảnh: pnpm official website.
URL ảnh trực tiếp: https://pnpm.io/img/features/fast-pumpkin.png
Trang nguồn: https://pnpm.io/
Ghi chú giấy phép: Đây là ảnh minh họa trên trang chính thức pnpm. Khi dùng lại trong bài thương mại hoặc thiết kế quảng cáo, nên kiểm tra thêm điều khoản sử dụng/tài sản thương hiệu của pnpm.
Ghi chú kỹ thuật: Ảnh được chèn bằng URL .png, không dùng base64 và không dùng SVG.


npm là gì?

npm là công cụ dòng lệnh và registry trung tâm để cài, quản lý và phát hành package JavaScript. Trong thực tế, nhiều người hay gọi npm là “Node Package Manager”, nhưng tài liệu thương hiệu của npm nói không nên giải thích npm như một từ viết tắt. Vì vậy, trong bài kỹ thuật nên gọi chính xác hơn là npm package manager hoặc npm client.

Khi chạy:

BASH
npm install

npm đọc package.json, giải dependency, tải package từ registry và tạo hoặc cập nhật node_modules. File package-lock.json giúp ghi lại phiên bản cụ thể và cây dependency đã sinh ra, để môi trường của đồng đội hoặc CI có thể cài lại gần giống nhau nhất.

Điểm mạnh của npm là mặc định có sẵn trong nhiều workflow Node.js, tài liệu nhiều, cộng đồng lớn và mức tương thích cao. Với dự án nhỏ hoặc đội chưa cần tối ưu mạnh về monorepo/disk/cache, npm vẫn là lựa chọn đủ tốt.


Vấn đề của node_modules: không chỉ là “nặng”

Nhiều người chỉ nhìn node_modules như một thư mục chiếm dung lượng. Vấn đề thực tế rộng hơn:

  1. Trùng lặp package giữa nhiều dự án. Nhiều repo cùng dùng react, express, lodash, typescript, vite, nhưng mỗi repo lại có bản cài riêng.
  2. Cài đặt chậm khi cache lạnh. Dự án càng nhiều dependency, việc tải, giải nén, ghi file càng tốn thời gian.
  3. Khó kiểm soát dependency ẩn. Một số cấu trúc node_modules phẳng có thể làm project vô tình import được package không khai báo trực tiếp trong package.json.
  4. Tốn tài nguyên trong monorepo. Nhiều package con cùng dùng dependency giống nhau khiến dung lượng và thời gian cài tăng nhanh.

Vì vậy, câu hỏi không chỉ là “npm có dùng được không”, mà là “với dự án hiện tại, cách lưu dependency của npm có còn tối ưu không”.


pnpm là gì?

pnpm là một package manager cho JavaScript/Node.js, tương thích với npm registry nhưng có cách tổ chức node_modules khác. Trang chủ pnpm mô tả nó là công cụ “fast, disk space efficient package manager”, nhấn mạnh tiết kiệm thời gian, tiết kiệm dung lượng và hỗ trợ monorepo.

Điểm khác biệt quan trọng nhất: pnpm dùng content-addressable store. Nói đơn giản, package được lưu một lần trong một kho chung trên máy. Khi dự án cần package đó, pnpm liên kết package từ kho chung vào node_modules thay vì sao chép toàn bộ nội dung mới.

Tài liệu pnpm giải thích rằng mỗi file của package bên trong node_modules là hard link tới content-addressable store, sau đó pnpm dùng symbolic link để dựng cấu trúc dependency phù hợp với Node.js.
Nguồn: pnpm Docs — Symlinked node_modules structure
https://pnpm.io/symlinked-node-modules-structure


Cách pnpm tiết kiệm dung lượng

Hãy tưởng tượng bạn có 10 dự án cùng dùng [email protected]. Với cách cài truyền thống, bạn dễ có 10 bản sao nằm trong 10 thư mục node_modules. Với pnpm, nội dung của [email protected] được lưu trong store chung, sau đó từng dự án chỉ liên kết tới nội dung đó.

Mô hình đơn giản:

TEXT
npm truyền thống:

project-a/node_modules/express
project-b/node_modules/express
project-c/node_modules/express

=> nhiều bản sao nằm rải rác theo từng dự án


pnpm:

global pnpm store/express
project-a/node_modules -> link tới store
project-b/node_modules -> link tới store
project-c/node_modules -> link tới store

=> nội dung package được tái sử dụng

Đây là lý do video nói pnpm giúp tiết kiệm dung lượng. Tuy nhiên, tỷ lệ tiết kiệm phụ thuộc vào số lượng dự án, mức trùng dependency, phiên bản package, hệ điều hành, filesystem và cache hiện có.


pnpm có nhanh hơn npm không?

Thường là có trong nhiều tình huống, đặc biệt khi máy đã có store/cache và nhiều dự án dùng lại dependency giống nhau. Nhưng không nên viết đơn giản là “pnpm luôn nhanh hơn npm”.

Trang benchmark chính thức của pnpm có bảng so sánh npm, pnpm, Yarn Classic và Yarn PnP. Benchmark này được cập nhật hằng ngày và cho thấy kết quả thay đổi theo trạng thái cache, lockfile và node_modules. Ví dụ trong bảng được ghi nhận ngày 14/06/2026, một số hàng cho thấy pnpm nhanh hơn npm rõ rệt, nhưng đó vẫn là benchmark theo kịch bản cụ thể.
Nguồn: pnpm Benchmarks
https://pnpm.io/benchmarks

Cách viết chính xác hơn:

pnpm thường có lợi thế về tốc độ cài đặt và dung lượng đĩa nhờ content-addressable store và cơ chế link, nhưng kết quả thực tế phụ thuộc vào dự án, cache, CI, ổ đĩa và cấu hình.


npm whitespace guideline
npm whitespace guideline

Nguồn ảnh: GitHub repo chính thức npm/logos, file white-space-guidelines.png.
URL ảnh trực tiếp: https://raw.githubusercontent.com/npm/logos/master/white-space-guidelines.png
Trang nguồn: https://github.com/npm/logos/blob/master/white-space-guidelines.png
Ghi chú giấy phép/thương hiệu: Repo npm/logos ghi rõ việc dùng tài sản logo chịu ràng buộc bởi chính sách thương hiệu của npm, Inc. Không nên dùng logo theo cách khiến người đọc hiểu nhầm rằng bài viết/dự án được npm bảo trợ.
Ghi chú kỹ thuật: Ảnh được chèn bằng URL .png, không dùng base64 và không dùng SVG.


Lợi ích chính của pnpm

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

Đây là lợi ích dễ thấy nhất nếu bạn làm nhiều dự án Node.js. Một máy dev có vài chục repo frontend/backend có thể có nhiều dependency trùng nhau. pnpm giảm việc ghi nhiều bản sao giống nhau bằng cách dùng store chung.

2. Cài đặt nhanh hơn trong nhiều trường hợp

Khi store đã có package, pnpm có thể liên kết lại thay vì tải và ghi lại toàn bộ. Điều này đặc biệt hữu ích khi làm monorepo hoặc khi chuyển qua lại nhiều nhánh dự án.

3. Dependency rõ ràng hơn

pnpm có cấu trúc node_modules chặt hơn, giúp giảm tình trạng project import nhầm package chưa khai báo trực tiếp. Điều này có thể làm một số dự án cũ “bị lỗi” khi chuyển sang pnpm, nhưng lỗi đó thường cho thấy trước đây dự án đang phụ thuộc vào dependency ẩn.

4. Hợp với monorepo

pnpm có workspace support và các lệnh lọc package phù hợp với monorepo. Với team nhiều package nội bộ, pnpm thường dễ quản lý hơn npm truyền thống.


Nhược điểm và lưu ý khi chuyển từ npm sang pnpm

Không nên chuyển chỉ vì video nói pnpm “tốt hơn”. Cần kiểm tra các điểm sau:

  • Một số tooling cũ có thể giả định node_modules phẳng kiểu npm/Yarn classic.
  • Dự án có thể đang import dependency ẩn chưa khai báo trong package.json.
  • CI/CD cần cache đúng thư mục store của pnpm.
  • Team cần thống nhất package manager; không nên để người dùng npm, người dùng yarn, người dùng pnpm cùng sửa lockfile.
  • Khi chuyển, cần commit pnpm-lock.yaml và bỏ thói quen sửa trực tiếp node_modules.

Khi nào nên dùng npm?

Dùng npm vẫn hợp lý nếu:

  • Dự án nhỏ, dependency ít.
  • Team muốn dùng công cụ mặc định, ít cấu hình.
  • Hệ thống build/deploy đã ổn định với npm.
  • Bạn không gặp vấn đề về dung lượng, tốc độ cài hoặc monorepo.

npm không “sai”. Nó chỉ không phải lúc nào cũng là lựa chọn tối ưu nhất cho nhiều repo lớn hoặc monorepo.


Khi nào nên dùng pnpm?

pnpm phù hợp nếu:

  • Bạn có nhiều dự án Node.js trên cùng máy.
  • Dự án có node_modules rất lớn.
  • Bạn làm monorepo.
  • CI mất nhiều thời gian ở bước install.
  • Bạn muốn dependency rõ ràng hơn và giảm phantom dependency.
  • Bạn muốn tiết kiệm dung lượng ổ đĩa trên máy dev hoặc runner.

Cách chuyển thử từ npm sang pnpm

Trước khi chuyển chính thức, nên thử trên một nhánh riêng:

BASH
corepack enable
corepack prepare pnpm@latest --activate
pnpm import
pnpm install
pnpm test
pnpm build

Sau đó kiểm tra:

BASH
pnpm why <package-name>
pnpm list
pnpm outdated

Nếu build lỗi do thiếu package, hãy cài dependency đó rõ ràng:

BASH
pnpm add <package-name>

Không nên sửa bằng cách ép hoisting ngay từ đầu, vì mục tiêu của pnpm là làm dependency rõ hơn. Chỉ dùng cấu hình hoisting khi thư viện/tooling thực sự cần.


Kết luận

Video nêu đúng một ý quan trọng: với nhiều dự án Node.js, dependency bị trùng lặp là vấn đề thật. npm vẫn phổ biến và dễ dùng, nhưng pnpm có kiến trúc lưu trữ thông minh hơn cho trường hợp nhiều repo, nhiều dependency và monorepo.

Cách hiểu ngắn gọn:

TEXT
npm  = đơn giản, phổ biến, mặc định, tương thích cao
pnpm = tiết kiệm dung lượng, cài nhanh trong nhiều trường hợp, dependency rõ hơn

Nếu bạn chỉ có một dự án nhỏ, npm đủ dùng. Nếu bạn làm nhiều dự án Node.js, làm frontend/backend liên tục hoặc dùng monorepo, pnpm đáng để thử.


Nguồn tham khảo

  1. npm Docs — npm install: https://docs.npmjs.com/cli/v8/commands/npm-install/
  2. npm Docs — package-lock.json: https://docs.npmjs.com/cli/v8/configuring-npm/package-lock-json/
  3. npm Docs — Logos and Usage: https://docs.npmjs.com/policies/logos-and-usage/
  4. pnpm official website: https://pnpm.io/
  5. pnpm Docs — Symlinked node_modules structure: https://pnpm.io/symlinked-node-modules-structure
  6. pnpm GitHub repository — Background: https://github.com/pnpm/pnpm
  7. pnpm Benchmarks: https://pnpm.io/benchmarks
  8. Dashboard Icons — npm icon: https://dashboardicons.com/icons/npm
  9. npm/logos GitHub repo: https://github.com/npm/logos

Ghi chú về ảnh

  • File này không dùng ảnh base64.
  • File này không chèn SVG.
  • Ảnh được chèn bằng URL PNG công khai.
  • Nếu đưa lên website/CMS, cần bảo đảm CMS cho phép tải ảnh từ cdn.jsdelivr.net, pnpm.ioraw.githubusercontent.com.
PR

Được biên soạn bởi PixelRouter Editorial Team

Chúng tôi cung cấp các bài viết chuyên sâu và chính xác về hạ tầng AI, bảo mật API, quản lý tài chính đám mây và tối ưu hóa hệ thống cho nhà phát triển.

Câu hỏi thường gặp

pnpm giúp tiết kiệm dung lượng ổ đĩa như thế nào?

pnpm sử dụng một kho lưu trữ nội dung chung (content‑addressable store). Khi một package được cài, nội dung của nó chỉ được lưu một lần trong kho này và các dự án khác sẽ tạo liên kết (hard link / symbolic link) tới cùng một bản sao thay vì sao chép lại. Nhờ vậy, nếu có nhiều dự án cùng dùng một package, dung lượng đĩa sẽ được giảm đáng kể.

pnpm có nhanh hơn npm trong việc cài đặt dependency không?

pnpm thường cho tốc độ cài đặt nhanh hơn npm, đặc biệt khi kho lưu trữ đã có sẵn các package và các dự án khác nhau dùng lại chúng. Tuy nhiên, tốc độ thực tế còn phụ thuộc vào trạng thái cache, kích thước dự án, cấu hình CI/CD và hệ thống tệp.

Khi nào nên chuyển từ npm sang pnpm?

Bạn nên cân nhắc chuyển sang pnpm khi có nhiều dự án Node.js trên cùng máy, dự án có `node_modules` lớn, làm việc với monorepo, CI mất nhiều thời gian ở bước install, hoặc muốn giảm các dependency ẩn và tiết kiệm dung lượng ổ đĩa. Nếu dự án nhỏ, dependency ít và môi trường build đã ổn định với npm, việc chuyển có thể không cần thiết.