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
  • 偶爾還要寫 RubyGoRust

為了管理這些版本,你可能裝了:

工具 管理什麼
nvm Node.js 版本
pyenv Python 版本
rbenv Ruby 版本
gvm Go 版本
asdf 萬用版本管理器

問題是:每個工具都有自己的設定方式、自己的 shell 鉤子、自己的 .tool-versions.nvmrc 檔案。維護成本極高,而且這些工具大多是 Bash 寫的,啟動慢得令人髮指。

Mise(讀作 /miːz/,「meez」)就是來終結這一切的。

Mise 是什麼?

Mise(法語「放置」的意思)是一個用 Rust 編寫的開發工具管理器,它把以下功能合為一體:

  1. 多語言版本管理 — 取代 asdf/nvm/pyenv/rbenv/gvm 等
  2. 環境變數管理 — 取代 direnv
  3. 任務執行器 — 取代 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-nodeactions/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 installasdf 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

相關連結:

如果你還在使用 nvm + pyenv + asdf 的組合,強烈建議試試 Mise。它會讓你感嘆:原來開發環境管理可以這麼簡單。