Mise 完整指南:一個工具取代 asdf/nvm/pyenv,10 倍速管理開發環境
TL;DR — Mise 是一個用 Rust 編寫的多語言版本管理器,速度比 asdf 快 20 倍以上。一個工具搞定 Node.js、Python、Ruby、Go、Java 等 50+ 種開發工具的版本切換,還支援環境變數管理和任務執行器。
為什麼你需要 Mise?
如果你是一個全端開發者,你的日常可能是這樣的:
- 專案 A 需要 Node.js 18,專案 B 需要 Node.js 20
- 後端用 Python 3.11,但某個老專案還卡在 Python 3.9
- 偶爾還要寫 Ruby、Go、Rust
為了管理這些版本,你可能裝了:
| 工具 | 管理什麼 |
|---|---|
nvm |
Node.js 版本 |
pyenv |
Python 版本 |
rbenv |
Ruby 版本 |
gvm |
Go 版本 |
asdf |
萬用版本管理器 |
問題是:每個工具都有自己的設定方式、自己的 shell 鉤子、自己的 .tool-versions 或 .nvmrc 檔案。維護成本極高,而且這些工具大多是 Bash 寫的,啟動慢得令人髮指。
Mise(讀作 /miːz/,「meez」)就是來終結這一切的。
Mise 是什麼?
Mise(法語「放置」的意思)是一個用 Rust 編寫的開發工具管理器,它把以下功能合為一體:
- 多語言版本管理 — 取代 asdf/nvm/pyenv/rbenv/gvm 等
- 環境變數管理 — 取代 direnv
- 任務執行器 — 取代 Makefile/just/task
核心優勢
| 特性 | Mise | asdf | nvm + pyenv |
|---|---|---|---|
| 語言 | Rust | Bash | Bash |
| 安裝速度 | ⚡ 極快(並行下載) | 🐢 慢(逐個克隆) | 🐢 慢 |
| Shell 啟動延遲 | ~0ms(無需 shims) | ~200-500ms | ~100-300ms |
相容 .nvmrc |
✅ | ❌ | ✅ |
相容 .python-version |
✅ | ❌ | ✅ |
相容 .tool-versions(asdf) |
✅ | ✅ | ❌ |
| 環境變數管理 | ✅ 內建 | ❌ | ❌ |
| 任務執行器 | ✅ 內建 | ❌ | ❌ |
| 自動補全 | ✅ 自動產生 | ❌ 需手動 | ❌ |
GitHub 資料: 30,000+ Stars,1,200+ Forks,MIT 授權條款,持續活躍更新。
安裝 Mise
Mise 的安裝非常簡單,支援所有主流平台。
Linux / macOS(推薦)
# 一行命令安裝
curl https://mise.run | sh
# 或者用 Homebrew(macOS)
brew install mise
# 或者用 Cargo(Rust 生態)
cargo install mise
啟用 Shell 整合
安裝完成後,需要在 shell 設定檔中新增啟用命令:
# Bash — 新增到 ~/.bashrc
echo 'eval "$(mise activate bash)"' >> ~/.bashrc
# Zsh — 新增到 ~/.zshrc
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
# Fish — 新增到 ~/.config/fish/config.fish
echo 'mise activate fish | source' >> ~/.config/fish/config.fish
重新載入 shell:
source ~/.bashrc # 或 source ~/.zshrc
驗證安裝
mise --version
# 輸出類似:mise 2026.x.x
mise doctor
# 檢查安裝狀態,顯示所有診斷資訊
快速上手:5 分鐘管理你的第一個工具
安裝 Node.js
# 安裝最新 LTS 版本
mise use -g node@lts
# 安裝指定版本
mise use -g node@20
# 查看已安裝的版本
mise ls node
-g 表示全域安裝(寫入 ~/.config/mise/config.toml)。不加 -g 則寫入目前目錄的 .mise.toml,實現專案級別的版本鎖定。
安裝 Python
# 安裝 Python 3.12
mise use -g python@3.12
# 驗證
python --version
# Python 3.12.x
同時安裝多個工具
# 一條命令安裝多個工具
mise use -g node@20 python@3.12 go@1.22 ruby@3.3 rust@latest
# 查看目前啟用的所有工具
mise ls
專案級版本鎖定
進入專案目錄,建立 .mise.toml:
cd ~/projects/my-app
# 為這個專案設定 Node.js 20 和 Python 3.11
mise use node@20 python@3.11
這會產生 .mise.toml 檔案:
[tools]
node = "20"
python = "3.11"
把這個檔案提交到 Git,團隊成員 clone 後執行 mise install 就能自動安裝所有需要的版本。
相容現有設定檔
Mise 自動識別以下檔案,無需任何額外設定:
| 檔案 | 對應工具 |
|---|---|
.nvmrc |
Node.js |
.node-version |
Node.js |
.python-version |
Python |
.ruby-version |
Ruby |
.go-version |
Go |
.tool-versions |
asdf 通用格式 |
.mise.toml / mise.toml |
Mise 原生格式 |
這意味著你可以無縫取代 asdf/nvm/pyenv,不需要改任何現有專案的設定。
進階功能
1. 環境變數管理(取代 direnv)
Mise 內建了環境變數管理,可以根據目錄自動載入/卸載環境變數:
# .mise.toml
[env]
DATABASE_URL = "postgres://localhost:5432/myapp"
REDIS_URL = "redis://localhost:6379"
NODE_ENV = "development"
API_KEY = {value = "sk-test-xxx", redact = true} # 日誌中自動脫敏
支援 .env 檔案:
[env]
_.file = ".env" # 從 .env 檔案載入
_.path = ["./bin", "./scripts"] # 自動新增到 PATH
與 direnv 的區別: Mise 的環境變數和工具版本在同一個檔案中管理,不需要兩套設定。
2. 任務執行器(取代 Makefile)
Mise 內建了一個強大的任務執行器:
# .mise.toml
[tasks.build]
description = "建置專案"
run = "npm run build"
[tasks.test]
description = "執行測試"
run = ["npm test", "npm run lint"]
[tasks.dev]
description = "啟動開發伺服器"
run = "npm run dev"
depends = ["build"] # 依賴:先執行 build
[tasks."db:migrate"]
description = "執行資料庫遷移"
run = "python manage.py migrate"
使用方式:
# 執行任務
mise run build
mise run test
mise run dev
# 列出所有可用任務
mise tasks
# 帶參數執行
mise run build -- --watch
3. 腳本別名和快捷方式
# .mise.toml
[alias.node]
lts = "20"
latest = "22"
[alias.python]
myproj = "3.11.6" # 專案固定版本
4. 多版本並行和自動切換
Mise 的核心魔法是自動版本切換。當你 cd 進入不同目錄時,Mise 會自動讀取該目錄的設定檔並切換工具版本:
# 專案 A 需要 Node 18
cd ~/projects/project-a
node --version # v18.x.x(自動切換)
# 專案 B 需要 Node 20
cd ~/projects/project-b
node --version # v20.x.x(自動切換)
這一切都發生在零延遲內——因為 Mise 用 Rust 編寫,不需要像 nvm 那樣在每次 cd 時執行 Bash 腳本。
5. 後端(Backend)系統
Mise 支援多種安裝後端,可以靈活選擇工具的來源:
# 使用官方預編譯二進位(預設,最快)
[tools]
node = "20"
# 使用 asdf 插件事態
[tools]
node = "asdf:mise-plugins/mise-node"
# 使用 ubi(通用二進位安裝器)
[tools]
jq = "ubi:jqlang/jq"
# 使用 go install
[tools]
golangci-lint = "go:golang.org/x/tools/gopls@latest"
# 使用 npm 全域安裝
[tools]
typescript = "npm:typescript"
# 使用 pip 安裝
[tools]
black = "pip:black"
# 使用 cargo 安裝
[tools]
ripgrep = "cargo:ripgrep"
這意味著 Mise 不僅能管理語言執行環境,還能管理任何開發工具——linter、formatter、CLI 工具等。
實戰案例:用 Mise 搭建全端開發環境
讓我們從零開始,用 Mise 搭建一個典型的全端專案(Next.js 前端 + FastAPI 後端)的開發環境。
第 1 步:建立專案結構
mkdir ~/projects/fullstack-app && cd ~/projects/fullstack-app
mkdir frontend backend
第 2 步:根目錄設定
在專案根目錄建立 mise.toml:
# mise.toml
[tools]
node = "20" # 前端需要
python = "3.12" # 後端需要
[env]
_.file = ".env" # 全域環境變數
[tasks.setup]
description = "初始化整個專案"
run = [
"cd frontend && npm install",
"cd backend && pip install -r requirements.txt"
]
[tasks.dev]
description = "啟動所有服務"
run = [
"cd frontend && npm run dev &",
"cd backend && uvicorn main:app --reload"
]
第 3 步:一鍵初始化
# 安裝所有工具
cd ~/projects/fullstack-app
mise install
# 執行初始化任務
mise run setup
# 啟動開發環境
mise run dev
整個團隊只需要 git clone + mise install + mise run dev 就能啟動開發環境。不再有「在我機器上能跑」的問題。
第 4 步:CI/CD 整合
在 GitHub Actions 中直接使用 Mise:
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install mise
uses: jdx/mise-action@v2
- name: Install tools
run: mise install
- name: Frontend tests
run: cd frontend && npm test
- name: Backend tests
run: cd backend && pytest
mise-action 會自動讀取 mise.toml 並安裝所有需要的工具,不需要手動設定 actions/setup-node、actions/setup-python 等。
從 asdf 遷移到 Mise
如果你已經是 asdf 使用者,遷移非常簡單:
# Mise 完全相容 .tool-versions 檔案
# 你甚至不需要做任何事,Mise 會自動讀取它
# 但如果你想把 .tool-versions 轉換為 mise.toml:
mise migrate asdf
# 遷移後移除 asdf(可選)
# Bash
sed -i '/asdf.sh/d' ~/.bashrc
# Zsh
sed -i '/asdf.sh/d' ~/.zshrc
關鍵優勢:
- mise install 比 asdf install 快 20 倍以上(並行下載 + 預編譯二進位)
- 沒有 shim 層,Shell 啟動零延遲
- 更好的錯誤提示和自動補全
- 內建任務執行器和環境變數管理
Mise vs 其他工具的對比總結
| 場景 | 傳統方案 | Mise 方案 |
|---|---|---|
| 管理 3 種語言版本 | 裝 3 個工具 | 1 個工具 |
| 團隊統一環境 | 每個人手動安裝 | mise install 一鍵完成 |
| Shell 啟動速度 | ~300ms+ | ~0ms |
| 環境變數 | direnv / 手動 export | 內建 |
| 專案任務 | Makefile / package.json scripts | 內建 tasks |
| CI 設定 | 每個語言一個 action | 一個 mise-action |
總結
Mise 是我近幾年見過的最實用的開發者工具之一。它用 Rust 的極致效能解決了版本管理的痛點,用一個統一的工具取代了散落各處的 nvm、pyenv、rbenv、direnv、Makefile。
值得使用的理由:
- ⚡ 快 — Rust 編寫,比 asdf 快 20 倍
- 🔧 統一 — 一個工具管理所有開發工具的版本
- 🔄 相容 — 完美相容
.nvmrc、.tool-versions等現有設定 - 🚀 生態 — 支援 50+ 種語言和工具
- 📦 內建任務執行器 — 不需要額外的 Makefile
- 🌍 環境變數管理 — 不需要額外的 direnv
- 🤝 團隊協作 —
mise.toml提交到 Git,新成員一鍵 setup
相關連結:
- GitHub:jdx/mise
- 文件:mise.jdx.dev
- 插件事態:mise 官方插件列表
如果你還在使用 nvm + pyenv + asdf 的組合,強烈建議試試 Mise。它會讓你感嘆:原來開發環境管理可以這麼簡單。