pnpm 12.0 chính thức ra mắt: Viết lại toàn bộ bằng Rust, tăng tốc và ổn định hơn
pnpm 12.0 là bản phát hành lớn được viết lại hoàn toàn bằng Rust, hứa hẹn hiệu suất vượt trội nhưng vẫn giữ nguyên các lệnh, cờ, cài đặt và định dạng lockfile của pnpm 11. Phiên bản này mang đến nhiều tính năng mới như xử lý dependency cycle hiệu quả, bộ nhớ đệm từ xa, và cải thiện đáng kể trải nghiệm cho nhà phát triển.

pnpm 12.0 vừa chính thức được phát hành, đánh dấu một bước ngoặt lớn khi toàn bộ trình quản lý gói phổ biến này được viết lại bằng ngôn ngữ Rust. Đáng chú ý, đây không phải là một bản nâng cấp mang tính phá vỡ: mọi lệnh, cờ, cài đặt và định dạng lockfile của pnpm 11 đều được giữ nguyên, giúp người dùng chuyển đổi dễ dàng.
Điểm khác biệt chính so với pnpm 11
Mặc dù pnpm 12 mang lại hiệu suất vượt trội nhờ Rust, nhóm phát triển nhấn mạnh rằng bản phát hành này không nhằm mục đích thay thế hoàn toàn trải nghiệm pnpm 11. Thay vào đó, họ tập trung vào việc cải thiện nền tảng bên dưới, mang đến một số thay đổi hành vi thực sự đáng chú ý:
-
Git dependencies được chuẩn hóa: Các URL git từ GitHub, GitLab và Bitbucket giờ đây đều được giải quyết qua HTTPS chính thức thay vì nhiều giao thức khác nhau. SSH chỉ được sử dụng khi người dùng cấu hình rõ ràng.
-
Cảnh báo cài đặt không nhận diện được: Các cài đặt sai chính tả trong
pnpm-workspace.yamlgiờ đây sẽ được báo lỗi rõ ràng, kèm gợi ý tên đúng thay vì bị bỏ qua một cách im lặng. -
Xử lý vòng lặp dependency hiệu quả: Lockfile giờ đây trở thành một hàm thuần túy của đồ thị dependency, giúp tạo ra kết quả nhị phân giống hệt nhau trong mọi lần cài đặt. Trên các workspace lớn có nhiều vòng lặp, hiệu suất phân giải peer dependencies nhanh hơn 2–3 lần và giảm 25% bộ nhớ sử dụng.
-
Hardlink được ưu tiên trên Linux: Trên hệ thống Linux, pnpm 12 thử hardlink trước thay vì reflink, giúp giảm một nửa thời gian cài đặt trên hệ thống tệp btrfs.
Các tính năng mới nổi bật
Project-aware global bins
Một trong những tính năng đáng chú ý nhất là khả năng pnpm 12 tự động chọn phiên bản Node.js, Deno hoặc Bun phù hợp với phiên bản mà dự án hiện tại đang sử dụng, thay vì luôn chạy phiên bản cài đặt toàn cục. Tính năng này có thể được cấu hình thông qua cài đặt globalShims.
Cài đặt các trình quản lý gói khác
pnpm 12 giờ đây có thể cài đặt và quản lý npm, Yarn Classic, Yarn Berry, Yarn 6 và Bun trực tiếp. Điều này giúp các dependency từ git repository sử dụng Yarn vẫn có thể được cài đặt trên máy chỉ có pnpm. Tính năng pnpm shim add yarn cũng cho phép liên kết Yarn theo phiên bản mà dự án chỉ định.
Bộ đệm side-effects từ xa (thử nghiệm)
Một khái niệm chứng minh (proof of concept) mới cho phép tái sử dụng kết quả build của dependency trên nhiều máy khác nhau thông qua pnpr, thay vì phải chạy các script lifecycle cục bộ. Hiện chỉ hoạt động trên Linux/glibc x64 và arm64.
Registry revisions
pnpm 12 hỗ trợ khái niệm "revision" — cho phép registry cung cấp một phiên bản thay thế của package đã phát hành (ví dụ như bản vá lỗ hổng bảo mật) mà không cần thay đổi số phiên bản hay URL gốc. Điều này được ghi lại trong lockfile chỉ bằng một dòng bổ sung.
Các cải tiến khác
pnpm initgiờ đây luôn ghim phiên bản mới nhất thay vì phiên bản đang chạy lệnh, tránh tình trạng dự án mới kế thừa phiên bản cũ.- Batch approval cho staged publishing: Duyệt nhiều package một lần chỉ với một mật khẩu một lần (OTP).
audit.ignorePrune: Tự động loại bỏ các mục miễn trừ bảo mật không còn cần thiết.- Chặn lệnh toàn cục dưới sudo: Các lệnh như
pnpm setuphaypnpm self-updatesẽ báo lỗi thay vì âm thầm hoạt động dưới quyền root.
Kết luận
pnpm 12.0 là một minh chứng rõ ràng cho thấy việc viết lại bằng Rust mang lại lợi ích thực sự về hiệu suất và độ ổn định, trong khi vẫn giữ được tính tương thích ngược cao. Đối với các nhà phát triển Việt Nam đang sử dụng pnpm trong các dự án monorepo hoặc workspace lớn, bản nâng cấp này đặc biệt đáng giá nhờ khả năng xử lý dependency cycle nhanh hơn và tạo lockfile ổn định hơn.
Hãy cài đặt pnpm 12 ngay hôm nay bằng lệnh:
pnpm self-update next-12
Lưu ý rằng bản phát hành này vẫn được cài đặt từ tag next-12 trên npm, trong khi tag latest vẫn trỏ đến pnpm 11.