
pnpm là gì?
pnpm là trình quản lý package nhanh và tiết kiệm ổ đĩa cho hệ sinh thái Node.js. Khác với npm và Yarn, pnpm lưu trữ các dependency trong một global store dùng chung, liên kết chúng vào từng project bằng hard links, nhờ đó tiết kiệm hàng GB ổ đĩa khi bạn làm việc với nhiều dự án cùng lúc.
Được phát triển bởi Zoltan Kochan từ năm 2016, pnpm hiện là lựa chọn mặc định của nhiều dự án lớn như Next.js, Vite, Vue, Astro, Prisma, Turborepo, Material UI và SvelteKit. Với hơn 590 triệu lượt tải mỗi tháng trên npm registry, pnpm đang dần thay thế npm trong các monorepo hiện đại.

Vì sao pnpm nhanh và tiết kiệm hơn npm?
Cơ chế cốt lõi của pnpm là content-addressable store: mọi file dependency được lưu một lần trong global store, định danh theo hash nội dung. Nếu 100 dự án cùng dùng chung một dependency, chỉ có một bản copy duy nhất tồn tại trên ổ đĩa.
Khi một version mới chỉ thay đổi 1 trong 100 file, pnpm chỉ thêm đúng 1 file đó vào store. Với npm, mỗi dự án lại tải toàn bộ dependency về thư mục node_modules riêng — lãng phí rất nhiều dung lượng.
So sánh hiệu năng (benchmark chính thức)
| Kịch bản | npm | pnpm | Yarn | Yarn PnP |
|---|---|---|---|---|
| Cài đặt sạch | 27.3s | 7.6s | 6.9s | 2.9s |
| Không có gì thay đổi (no-op) | 1.0s | 0.5s | 4.6s | n/a |
| Cập nhật | 6.3s | 7.7s | 5.3s | 2.6s |
pnpm nhanh hơn npm khoảng 3.6 lần khi cài đặt sạch, nhờ kiến trúc 3 giai đoạn: resolve → tính toán cấu trúc → link (thay vì resolve → fetch → ghi toàn bộ như npm).

Strict node_modules: khác biệt quan trọng nhất
npm và Yarn cổ điển hoisting dependency lên phẳng — mọi package đều nằm ở node_modules gốc, khiến code của bạn có thể sử dụng package mà không khai báo trong package.json (gọi là phantom dependencies).
pnpm sử dụng cấu trúc nghiêm ngặt: chỉ các dependency trực tiếp được symlink vào node_modules gốc. File thật nằm trong node_modules/.pnpm/<name>@<version>/node_modules/<name>. Node.js vẫn resolve được nhờ real path, nhưng bạn không thể dùng package chưa khai báo — phát hiện lỗi sớm, tránh những bug khó chịu khi chuyển môi trường.
Workspace và monorepo
pnpm có hỗ trợ monorepo tích hợp sẵn qua file pnpm-workspace.yaml. Bạn có thể:
- Chạy lệnh đệ quy trên tất cả package: pnpm run build –recursive
- Lọc package cụ thể: pnpm –filter @app/web build
- Dùng giao thức workspace:* — tự động chuyển thành semver khi publish
Không cần cài thêm Lerna hay Yarn workspaces — pnpm xử lý monorepo ngay từ hộp. Các dự án lớn như Vercel và Turborepo chọn pnpm vì lý do này.
Cài đặt và các lệnh cơ bản
# Cài đặt pnpm
npm install -g pnpm
# Cài dependency
pnpm install
pnpm add react
pnpm add -D typescript
# Chạy script
pnpm run dev
pnpm exec eslint src
# Chạy package không cần cài (giống npx)
pnpm dlx create-vite my-app

Bảo mật tốt hơn
Từ phiên bản v11, pnpm mặc định chặn postinstall script của dependency trừ khi được allowlist (lệnh pnpm approve-builds). Tarball được xác minh toàn vẹn, peer dependencies tự cài — giảm đáng kể nguy cơ supply chain attack.
Hạn chế của pnpm
- Một số tooling không tương thích cấu trúc symlink — cần đổi nodeLinker=hoisted
- Một số package trong hệ sinh thái dựa vào hoisting sẽ báo lỗi khi migrate
- Không có versioning tích hợp — cần Changesets hoặc Rush
- pnpm update chậm hơn npm trong benchmark chính thức
Các lệnh nâng cao của pnpm
pnpm không chỉ đơn giản là thêm/xóa package. Một số lệnh nâng cao thường dùng trong dự án thực tế:
- pnpm patch <package>: tạo bản sửa đổi cục bộ cho dependency — hữu ích khi upstream có bug cần fix tạm mà chưa release
- pnpm dedupe: tối ưu lại tree dependency, gỡ bỏ các bản sao thừa — tiết kiệm thêm dung lượng
- pnpm why <package>: xem tại sao một package tồn tại trong project, ai phụ thuộc vào nó — rất hữu ích khi audit dependency
- pnpm store prune: dọn dẹp global store, xóa các phiên bản không còn dùng ở bất kỳ project nào
- pnpm sbom: tạo Software Bill of Materials — yêu cầu bắt buộc trong một số dự án doanh nghiệp
- pnpm approve-builds: duyệt các build script của dependency — tính năng bảo mật mới từ v11, chặn side-effect khi cài package mới
Ngoài ra, CI/CD pipeline nên dùng –frozen-lockfile để đảm bảo bản cài giống hệt developer, tránh drift giữa các môi trường. Pnpm cũng hỗ trợ reproducible builds qua lockfile — bạn có thể yên tâm rằng pnpm install trên máy nào cũng cho ra cùng kết quả.
Khi nào nên dùng pnpm?
- Làm monorepo nhiều package — pnpm là lựa chọn số một hiện nay
- Máy ít dung lượng, cần tiết kiệm ổ đĩa
- CI/CD muốn cài đặt nhanh với lockfile đông cứng (–frozen-lockfile)
- Team muốn code nghiêm ngặt, không phantom dependencies
Với dự án nhỏ đơn lẻ, npm vẫn ổn — nhưng nếu bạn đang bắt đầu dự án mới hoặc quản lý nhiều dự án, pnpm là lựa chọn đáng cân nhắc ngay từ đầu.
Tham khảo thêm:
