mise: quản lý phiên bản Node, Python, Go, biến môi trường và task trong một file
Tóm tắt
mise gom quản lý phiên bản công cụ, biến môi trường theo thư mục và task vào một mise.toml. mise use node@24, mise install, mise run dev. Commit file cấu hình, giữ secret trong .env bị ignore.
Project A cần Node 18, project B cần Node 22 và Python 3.12, project C dùng Go và Terraform phiên bản cố định. Thế là máy dev có nvm, pyenv, goenv, tfenv, mỗi cái một cách cấu hình, cộng thêm direnv cho biến môi trường và Makefile cho lệnh. mise (đọc là "meez") gom ba việc vào một công cụ và một file mise.toml: quản lý phiên bản công cụ dev, biến môi trường theo thư mục, và chạy task. Vào thư mục project là có đúng phiên bản, đúng biến.

Cài đặt
curl -fsSL https://mise.run | sh # macOS/Linux
brew install mise
winget install jdx.mise # Windows
# Kích hoạt trong shell (thêm vào ~/.zshrc)
eval "$(mise activate zsh)"
Quản lý phiên bản công cụ
cd my-project
mise use node@24 # cài Node 24 và ghi vào mise.toml của project
mise use [email protected]
mise use -g go@latest # đặt phiên bản mặc định toàn cục
mise install # cài mọi công cụ khai báo trong mise.toml (sau khi clone)
mise ls # xem công cụ đang dùng và nguồn khai báo
mise exec node@20 -- node --version # chạy một lần với phiên bản khác
mise đọc được cả file cấu hình của công cụ khác như .tool-versions (asdf), .nvmrc, .python-version, nên chuyển sang dần được mà không phá cấu hình cũ.
Một file cho cả project
# mise.toml
[tools]
node = "24"
python = "3.12"
terraform = "1.9"
[env]
NODE_ENV = "development"
DATABASE_URL = "postgres://localhost:5432/app_dev"
_.file = ".env" # nạp thêm biến từ .env (không commit file này)
[tasks.dev]
description = "Chạy server dev"
run = "npm run dev"
[tasks.test]
run = ["npm test", "pytest"]
[tasks.ci]
depends = ["test"]
run = "npm run build"
mise run dev # chạy task
mise run ci # chạy test trước rồi build
mise tasks # liệt kê task
mise thay thế gì?
| Nhu cầu | Công cụ cũ | Với mise |
|---|---|---|
| Phiên bản runtime | nvm, pyenv, asdf, rbenv… | [tools] |
| Biến môi trường theo thư mục | direnv | [env] |
| Chạy lệnh của project | Makefile, npm scripts | [tasks] |
Lưu ý
- Commit
mise.tomlđể team và CI dùng cùng phiên bản; không ghi secret vào đó, dùng file.envbị ignore hoặc trình quản lý secret. - mise hỏi bạn "trust" file cấu hình lạ trước khi áp dụng, vì cấu hình có thể chạy lệnh; chỉ trust repo bạn tin.
- Không bắt buộc dùng cả ba phần: có thể chỉ dùng
[tools]và giữ Makefile hay just cho task. - Trong CI, dùng action hoặc lệnh
mise installđể cài đúng phiên bản trước khi build.
Áp dụng thế nào?
- Dev: Gỡ dần nvm/pyenv, dùng
mise usetrong từng project; không còn quên chuyển phiên bản khi đổi project. - Tech Lead: Thêm
mise.tomlvào mọi repo; hướng dẫn onboarding rút gọn còn "cài mise, chạymise install, chạymise run dev". - PM: Lỗi "máy tôi chạy được" do lệch phiên bản giảm hẳn, dev mới bắt tay vào việc nhanh hơn.
Nguồn & tham khảo
- jdx/mise — jdx (GitHub)
- mise documentation — jdx