前言:为什么要用 mise?
作为一个开发者,你是否遇到过这样的场景:
项目 A 需要 Node.js 18,项目 B 需要 Node.js 20,你不得不在 nvm 中来回切换
同时维护 Python、Java、Go 项目,每个语言都有自己的版本管理工具(pyenv、jenv、gvm),记不清命令
换台新电脑,需要手动安装和配置一整套开发环境,耗时半天
asdf 虽然统一了版本管理,但 shim 机制带来的延迟让人烦躁,尤其是大型 monorepo 中 cd 一下都要卡顿
mise (读作 “meez”,源自法语 “mise en place”,意为”一切就位”)就是为解决这些问题而生的新一代开发环境管理工具。
它的核心优势可以用一张表格看清楚:
维度
asdf (0.16+)
mise
实际感受
核心语言
Go
Rust
mise 启动/切换快 2-5 倍
shim 机制
有(明显延迟)
无(直接修改 PATH)
cd 项目瞬间生效
环境变量
需 direnv
原生支持
少装一个工具
任务运行
无(靠 Makefile)
内置 task runner
可替代 Makefile
配置文件
.tool-versions
.mise.toml + 兼容旧格式
更强大灵活
简单说,mise = asdf + direnv + make,但用 Rust 写成,更快、更现代。
一、安装 mise 快速安装(推荐) 绝大多数用户只需执行这一条命令:
curl https://mise.run | sh
安装完成后,mise 会被放在 ~/.local/bin/mise。 验证安装:
你应该能看到类似输出:
2026.5.16 windows-x64 (2026-05-28)
其他安装方式 macOS + Homebrew:
Linux(apt/deb): sudo apt update && sudo apt install -y gpg sudo install -dm 755 /etc/apt/keyrings wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1>/dev/null echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=amd64] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.listsudo apt update sudo apt install -y mise
Windows: mise 对 Windows 有良好的原生支持,推荐通过 Scoop 安装:
scoop bucket add main scoop install mise
Shell 集成(关键步骤) 为了让 mise 在 cd 进入目录时自动切换工具版本,需要将以下命令添加到你的 shell 配置文件中:
Zsh(编辑 ~/.zshrc): echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrcsource ~/.zshrc
Bash(编辑 ~/.bashrc): echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrcsource ~/.bashrc
Fish(编辑 ~/.config/fish/config.fish): echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish
基础使用 安装并切换工具版本 mise 支持数百种开发工具:Node.js、Python、Java、Go、Rust、Terraform 等等。
安装特定版本: mise install node@20 mise install python@3.12 mise install go@1.21
全局设置(默认版本): mise use --global node@20 mise use --global python@3.12
之后在终端中直接运行 node -v 就会是 20.x 版本。
项目级设置(推荐做法): 在项目根目录下执行:
cd my-projectmise use node@18 mise use python@3.11
这会在当前目录生成一个 .mise.toml 文件,记录项目需要的工具版本。团队成员 clone 代码后,只需执行 mise install 即可自动安装所有依赖。
查看当前使用的版本: mise current mise ls mise ls --current
模糊版本匹配(省心功能) mise 支持灵活的版本写法,不用死记精确版本号:
mise use node@20 mise use node@lts mise use node@latest mise use python@3.12
临时使用特定版本 如果你只是临时想用一个不同版本,不需要修改配置:
mise exec node@22 -- node -v mise shell node@18
迁移旧项目 如果你有使用 asdf 或 nvm 的旧项目,mise 可以直接读取它们的配置文件。 启用旧配置文件兼容:
mise settings set legacy_version_file true
然后 mise 就能自动识别 .tool-versions、.nvmrc、.python-version 等文件。 将 asdf 配置迁移到 mise:
mise import-asdf mise generate mise.toml --tool-versions
环境变量管理(替代 direnv) mise 不仅可以管理工具版本,还能管理项目级的环境变量。这意味着你不再需要 direnv。 在项目的 .mise.toml 中添加 [env] 部分:
[env] NODE_ENV = "development" API_KEY = "your-api-key-here" DATABASE_URL = "postgresql://localhost:5432/myapp" DEBUG = "true"
当你 cd 进入这个目录时,这些环境变量会自动加载。
结合 .env 文件: mise 也支持从 .env 文件读取变量,只需在配置中引用:
[env] _ = { file = ".env" }
设置和查看环境变量: mise set SOME_VAR=bar mise env
任务运行(替代 Makefile) mise 内置了任务运行器,可以替代 Makefile 或 npm scripts。 在 .mise.toml 中定义任务:
[tasks.build] description = "构建项目" run = "npm run build" [tasks.test] description = "运行测试" run = "npm test && pytest" depends = ["lint" ] [tasks.lint] description = "代码检查" run = """ biome check --write . ruff check --fix """ [tasks.dev] description = "启动开发服务器" run = "npm run dev" [tasks.deploy] description = "部署到生产环境" depends = ["test" , "build" ] run = "terraform apply -auto-approve"
执行任务: mise run build mise run test mise run dev mise r deploy mise deploy
任务的高级特性:
[tasks.build] run = "cargo build" sources = ["src/**/*.rs" , "Cargo.toml" ]outputs = ["target/debug/myapp" ]
并行执行:默认最多 4 个任务并行,可通过 –jobs 调整
实战:一个完整的多语言项目配置 假设你有一个全栈项目,前端用 Node.js 20 + Bun,后端用 Python 3.12 + Go 1.21,还用了 Terraform 管理基础设施。 项目的 .mise.toml 看起来像这样:
[tools] node = "20" bun = "latest" python = "3.12" go = "1.21" terraform = "1.6" [env] NODE_ENV = "development" DEBUG = "true" DATABASE_URL = "postgresql://localhost:5432/app" GO_ENV = "dev" [tasks.dev] description = "启动前后端开发服务器" run = [ { task = "dev:frontend" }, { task = "dev:backend" }, ] [tasks."dev:frontend"] description = "启动前端 dev server" run = "bun run dev" dir = "frontend" [tasks."dev:backend"] description = "启动后端服务" run = "go run ./cmd/server" dir = "backend" [tasks.test] description = "运行所有测试" depends = ["test:backend" , "test:frontend" ][tasks."test:backend"] run = "go test -v ./..." dir = "backend" [tasks."test:frontend"] run = "bun test" dir = "frontend" [tasks.build] description = "构建生产版本" depends = ["build:frontend" , "build:backend" ][tasks."build:frontend"] run = "bun run build" dir = "frontend" [tasks."build:backend"] run = "go build -o bin/app ./cmd/server" dir = "backend" [tasks.deploy] description = "部署到生产环境" depends = ["test" , "build" ]run = "terraform apply -auto-approve" env = { NODE_ENV = "production" }
团队成员上手流程: git clone https://github.com/company/myapp.git cd myappmise install mise run dev mise run test
新成员从零到运行项目,只需要 3 条命令,无需手动安装任何语言环境。
从 asdf 迁移(实操指南) 如果你正在使用 asdf,迁移到 mise 非常平滑。
第 1 步:安装 mise(按第一节的步骤) 第 2 步:启用兼容模式 mise settings set legacy_version_file true
第 3 步:导入 asdf 已安装的工具
第 4 步:测试验证 cd ~/your-projectnode -v python -v
第 5 步:生成 mise 原生配置(可选但推荐) mise generate mise.toml --tool-versions
第 6 步:确认没问题后,清理 asdf
常见问题 Q1: 安装后 mise 命令找不到? 确保 ~/.local/bin 在你的 PATH 中。可以添加到 shell 配置:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
Q2: 进入项目目录后版本没有自动切换? 检查是否已正确配置 shell 集成(见 1.3 节)。同时确认 .mise.toml 或 .tool-versions 存在于项目根目录。
Q3: 与现有 nvm/pyenv 冲突吗? mise 接管 PATH 后会优先使用自己管理的版本。建议卸载其他版本管理工具以避免冲突,但 mise 也兼容它们的存在。
Q4: Windows 下路径问题? mise 原生支持 Windows,但建议使用 WSL2 + Ubuntu 获得最佳体验。如果必须在原生 Windows 下使用,确保 shell 配置文件路径正确。
Q5: 如何更新 mise?
或重新运行安装脚本:
curl https://mise.run | sh
总结 mise 将版本管理、环境变量、任务运行三大功能整合在一个工具中,用 Rust 带来的高性能告别了 asdf 的 shim 延迟。无论是个人开发者还是团队协作,mise 都能显著提升开发环境的配置效率。
核心优势回顾:
统一入口 :告别 nvm/pyenv/gvm/asdf 的组合混战
性能出色 :直接修改 PATH,无 shim 层,cd 瞬间切换
兼容性强 :可直接读取现有配置文件,迁移成本极低
功能全面 :内置 env 和 task 管理,减少依赖
跨平台 :Linux、macOS、Windows 都有良好支持
从今天开始,让你的开发环境”一切就位”(mise en place)吧。
更多资源: