- Các hạng mục so sánh chính: đa nền tảng, thiết lập ban đầu, nguồn phiên bản Node, mức độ sử dụng hằng ngày
Node Version Manager (NVM)
- Với 75.2k sao trên GitHub, đây là giải pháp quản lý phiên bản Node phổ biến nhất
- Xuất hiện từ sớm và nhận được sự yêu thích lớn từ cộng đồng
- Không hỗ trợ Windows đầy đủ, nhưng hoạt động trên GitBash, Cygwin, WSL, v.v.
- Có gói riêng cho Windows là nvm-windows, nhưng đó không phải là chính NVM
- Chỉ hỗ trợ shell POSIX (
bash, zsh), nên người dùng Fish và các shell khác bị loại trừ
- Có thể cài đặt bằng một lệnh đơn giản
- Có thể xác định phiên bản Node.js cần dùng thông qua tệp
.nvmrc
- Lệnh
nvm use chỉ thiết lập phiên bản Node.js cho shell hiện tại, nên ngay cả khi rời thư mục dự án thì phiên bản đó vẫn được giữ nguyên
- Điều này tạo ra gánh nặng là luôn phải nhận biết phiên bản Node.js của shell hiện tại và phiên bản mà dự án yêu cầu
- Dù vẫn tốt hơn việc quản lý thủ công tất cả các phiên bản Node.js, nhưng còn khá xa mới đạt đến mức tích hợp hoàn hảo
N
- Là trình quản lý phiên bản Node.js phổ biến với 18.5k sao trên GitHub
- Không phải công cụ đa nền tảng và có nhiều hạn chế hơn NVM
- Không hoạt động trên Windows native shell, Git for Windows Bash hoặc Cygwin DLL
- Có thể cài trực tiếp qua NPM hoặc Brew, hoặc tải script
sh để cài đặt
- Có thể phát hiện trực tiếp phiên bản Node từ mục
"engines" trong package.json
- Vẫn có vấn đề là phải tự theo dõi để dùng đúng phiên bản Node.js cho các dự án khác nhau
- Vì quản lý phiên bản Node.js ở mức "toàn cục", nên sau khi đóng shell, phiên bản Node dùng cho dự án cuối cùng vẫn còn được giữ lại
Fast Node Manager (FNM)
- Là trình quản lý phiên bản Node được viết bằng Rust, có 15.2k sao trên GitHub
- Là trình quản lý phiên bản Node đa nền tảng đầu tiên trong danh sách này
- Chạy được trên Windows mà không cần cài thêm gói nào khác
- Quy trình cài đặt rõ ràng và trực quan
- Quản lý phiên bản Node.js theo từng shell và dùng phiên bản "mặc định" nếu dự án không chỉ định phiên bản
- Có tính năng tự động chuyển phiên bản Node.js theo thư mục, nhưng cần cấu hình
- Để tính năng tự động chuyển hoạt động đúng, cần cài sẵn các phiên bản Node.js cần thiết
- Chỉ có thể phát hiện phiên bản Node từ tệp
.node-version hoặc .nvmrc
Volta
- Với 10k sao trên GitHub, đây là ngôi sao đang lên trong thế giới trình quản lý phiên bản
- Được viết bằng Rust và là công cụ đa nền tảng
- Quy trình cài đặt mượt mà trên các hệ thống dựa trên Unix
- Không cần thêm tệp nào để thiết lập phiên bản Node.js
- Lấy cấu hình trực tiếp từ package.json
- Mục
"engines" nằm ngay cạnh cấu hình Volta, nên rất dễ đồng bộ phiên bản
- Có thể quản lý cả toolchain, cho phép chuyển động không chỉ phiên bản Node.js mà cả phiên bản Yarn
- Mỗi lần chạy lệnh cài đặt, công cụ sẽ đảm bảo phiên bản Node.js và Yarn khớp với những gì đã khai báo
PNPM
- Thường được xem là lựa chọn thay thế cho NPM hoặc Yarn, nhưng cũng có thể quản lý phiên bản Node.js
- Là công cụ đa nền tảng và mang lại trải nghiệm quản lý phiên bản Node.js đồng nhất trên mọi nền tảng
- Vì quản lý phiên bản Node không phải tính năng cốt lõi nên khó sử dụng cùng với NPM hoặc Yarn
- Node.js được cài bằng PNPM không bao gồm Corepack
- Chỉ có thể quản lý phiên bản Node.js ở mức toàn cục, không thể cấu hình theo từng shell
- Không tự động chuyển phiên bản Node.js khi di chuyển giữa các dự án, nên người dùng phải tự theo dõi
Kết luận
- Các trình quản lý phiên bản Node.js đã có rất nhiều bước tiến
- NVM là giải pháp lâu đời nhất và phổ biến nhất, và hiện vẫn như vậy
- Tuy nhiên, hệ sinh thái đang tiếp tục phát triển, với nhiều công cụ như N, FNM, Volta xuất hiện
- Ở thời điểm hiện tại, Volta có vẻ là trình quản lý phiên bản Node.js đầy đủ tính năng và hoàn thiện nhất
- Volta là công cụ đa nền tảng, mang lại trải nghiệm mượt mà trong sử dụng hằng ngày và còn quản lý cả các công cụ khác mà dự án sử dụng
4 bình luận
Vì thấy phiền khi phải học cách quản lý riêng bằng package, nên tôi cứ dùng
brew unlink && brew link node@14thôi.Vì có quá nhiều thứ nên động lực để thật sự học nghiêm túc lại trở nên "mong manh".
Nhớ lại hồi xưa còn phải lục lọi các file thực thi dành cho Windows trên FileForge, mới thấy dù tiện thì cũng không khỏi nghĩ là có thật sự được phép tiện đến mức này không.
Tôi kỳ vọng ở trình quản lý phiên bản không hẳn là hiệu năng mà là tính đa dụng. Xét ở khía cạnh đó, tôi đang dùng https://github.com/asdf-vm/asdf khá hài lòng vì nó đáp ứng rất tốt. Tùy theo plugin, nó không chỉ quản lý
nodemà còn cảpython,ruby,golangvà nhiều thứ khác. Tôi cũng đang dùng rất ổn plugindirenv.Nodenv cũng là một lựa chọn thay thế khá ổn, nên hơi tiếc vì không được nhắc đến. Có lẽ nó bị loại vì không quá nổi tiếng với 2.2k GitHub star.
Vì dựa trên shell script nên khả năng tương thích với Windows cũng yếu giống NVM hay N, nhưng bù lại ngoài phiên bản Node.js toàn cục, nó còn có thể chỉ định phiên bản Node.js theo từng thư mục, hoặc khởi chạy một môi trường shell mới dùng một phiên bản Node.js cụ thể.