Bối cảnh: Khi “Version Hell” không còn là lời đồn
Lập trình viên thường gặp cảnh “dở khóc dở cười” với phiên bản phần mềm. Dự án A cần Node.js v14, dự án B yêu cầu v18. Trong khi đó, script Python cũ chỉ chạy trên bản 3.7, nhưng bạn lại cần bản 3.11 cho tính năng mới.
Thời còn làm sysadmin, mình từng mất trắng một buổi chiều chỉ để debug lỗi môi trường. Ứng dụng không chạy vì mình quên chuyển phiên bản Ruby trước khi deploy. Lúc đó, máy mình là một “nồi lẩu thập cẩm”: nvm cho Node, pyenv cho Python, rbenv cho Ruby. File .zshrc phình to hơn 100 dòng chỉ để load các trình quản lý này, khiến shell khởi động chậm chạp vô cùng.
asdf-vm xuất hiện như một vị cứu tinh. Thay vì cài 5-7 công cụ riêng biệt, bạn chỉ cần đúng một framework duy nhất. Nó hoạt động theo cơ chế plugin. Bạn cần ngôn ngữ nào, hay thậm chí là Terraform, Kubectl, chỉ việc gắn thêm plugin đó vào. Một cú pháp, một quy trình cho mọi thứ.
Cài đặt asdf-vm trên Linux
Để bắt đầu, chúng ta cần một môi trường sạch. asdf chạy mượt mà trên Ubuntu, Debian, Fedora và cả Arch Linux.
Bước 1: Cài đặt các dependency cần thiết
Máy bạn cần có sẵn git và curl trước khi kéo asdf về. Với hệ điều hành Ubuntu hoặc Debian, hãy chạy lệnh sau:
sudo apt update
sudo apt install curl git -y
Bước 2: Tải asdf về máy
Cách tốt nhất là clone trực tiếp từ repo GitHub để dễ cập nhật. Hiện tại v0.14.0 là bản ổn định. Bạn có thể kiểm tra tag mới nhất trên trang chủ của họ.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
Bước 3: Cấu hình Shell (Bash/Zsh)
Đây là bước quyết định. Nếu thiếu cấu hình shell, lệnh asdf sẽ rơi vào trạng thái “command not found”.
Với người dùng Bash (mặc định trên Ubuntu), hãy dán đoạn này vào file ~/.bashrc:
echo '. "$HOME/.asdf/asdf.sh"' >> ~/.bashrc
echo '. "$HOME/.asdf/completions/asdf.bash"' >> ~/.bashrc
source ~/.bashrc
Nếu bạn dùng Zsh, hãy thêm vào file ~/.zshrc:
echo '. "$HOME/.asdf/asdf.sh"' >> ~/.zshrc
source ~/.zshrc
Cấu hình thực tế: Quản lý Node.js, Python và Go
Sức mạnh của asdf nằm ở hệ thống hơn 500 plugin. Mặc định, asdf giống như một khung xương trống. Bạn cần “dạy” nó cách xử lý từng ngôn ngữ cụ thể.
Cài đặt Plugin
Mỗi ngôn ngữ yêu cầu một plugin riêng. Hãy bắt đầu với bộ ba phổ biến nhất trong giới dev hiện nay:
# Thêm plugin cho Node.js
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
# Thêm plugin cho Python
asdf plugin add python
# Thêm plugin cho Go
asdf plugin add golang
Cài đặt các phiên bản cụ thể
Sau khi có plugin, việc cài đặt phiên bản chỉ tốn vài giây. Ví dụ với Node.js:
# Liệt kê mọi phiên bản Node.js có thể cài
asdf list all nodejs
# Cài bản LTS mới nhất
asdf install nodejs lts
# Cài các phiên bản cụ thể cho từng dự án
asdf install nodejs 18.16.0
asdf install python 3.10.11
asdf install golang 1.20.4
Kinh nghiệm xương máu: asdf sẽ build Python từ source code. Nếu máy thiếu thư viện như libssl-dev, lệnh cài đặt sẽ báo lỗi ngay. Đừng lo lắng, chỉ cần cài thêm package hệ thống theo log lỗi rồi chạy lại là xong.
Thiết lập phiên bản Global và Local
Đây là tính năng “đáng đồng tiền bát gạo” nhất. asdf cho phép bạn định nghĩa phiên bản mặc định cho toàn máy hoặc riêng từng thư mục.
Thiết lập Global: Dùng khi bạn muốn phiên bản này xuất hiện ở mọi nơi.
asdf global nodejs 18.16.0
asdf global python 3.10.11
Thiết lập Local: Giả sử dự án cũ của bạn bắt buộc dùng Node v14. Hãy truy cập vào thư mục đó và gõ:
cd ~/my-old-project
asdf local nodejs 14.21.3
Lúc này, asdf tự tạo file .tool-versions. Phép màu xảy ra ở đây: cứ hễ bạn cd vào thư mục này, Node.js sẽ tự nhảy về v14. Thoát ra ngoài, nó lại về v18. Bạn không cần bận tâm chuyển đổi thủ công nữa.
Kiểm tra và Tối ưu quy trình làm việc
Để kiểm tra trạng thái hiện tại của hệ thống, bạn sử dụng lệnh:
asdf current
Màn hình sẽ liệt kê chính xác phiên bản nào đang chạy và nguồn gốc của nó (từ file global hay local).
Bảo trì Plugin
Cộng đồng cập nhật plugin rất thường xuyên để hỗ trợ các bản vá bảo mật. Bạn có thể làm mới toàn bộ chỉ với một dòng lệnh:
asdf plugin update --all
Nếu không còn nhu cầu sử dụng một ngôn ngữ, hãy gỡ bỏ nó để làm sạch bộ nhớ:
asdf plugin remove golang
Mẹo nhỏ cho Teamwork
Hãy commit file .tool-versions vào Git. Khi đồng nghiệp clone code về, họ chỉ cần gõ asdf install là có ngay môi trường y hệt bạn. Không còn những cuộc tranh cãi “sao máy tôi chạy được mà máy bạn thì không”.
Sử dụng asdf giống như việc dọn dẹp lại bàn làm việc bừa bộn. Nó giúp bạn tập trung viết code thay vì loay hoay cấu hình. Nếu bạn đã mệt mỏi với việc quản lý nvm hay pyenv, hãy thử asdf ngay hôm nay.

