开发者工具箱升级:mise 正在取代 asdf,成为新一代 polyglot 版本管理器

5 分钟阅读

如果你在在用 asdfnvmpyenvrbenv 分别管理 Node.jsPythonRubyGo 等版本,那么推荐你尝试一下 mise(读作 “MEEZ ahn plahs”,法语 mise en place,意为“一切就位”)。mise 最初叫 rtx(2024 年改名),用 Rust 重写核心,定位不再是“单纯的版本管理器”,而是 “开发环境的统一前端”(the front-end to your dev env)。它把版本切换、环境变量管理、任务运行(task runner)整合到同一个工具里,号称要取代 asdf + direnv + make/npm run 的组合。

mise 解决了什么痛点

传统方案的典型问题:

  • 工具碎片化:nvm 只管 Nodepyenv 只管 Pythongvm/rustup 各自为政
  • shim 延迟:asdf 的 shim 机制在 cd 项目目录时有明显卡顿(尤其是大 monorepo)
  • 环境变量麻烦:项目需要不同 .env、API key、FEATURE_FLAG 时,通常要靠 direnv 额外管理
  • 命令不统一:nvm usepyenv shellasdf local 记不过来
  • 插件安全性:asdf 插件是第三方 shell 脚本,供应链风险较高

mise 的回答是:

  • Rust 性能:启动和切换几乎无感知(比 asdf-go 0.16+ 还快很多)
  • 无 shim:直接修改 PATH,which node 返回真实路径,无延迟
  • 原生 env + task:项目级环境变量和脚本直接写在 mise.toml
  • 兼容旧生态:支持 .tool-versions.nvmrc.python-version 等遗留文件
  • 更安全的后端:优先使用 aqua registry、cargo、npm 等可信源,插件作 fallback

mise 对比 asdf

维度asdf (0.16+ Go 版)mise (2026 当前主流版本)实际影响(开发者反馈)
核心语言GoRustmise 启动/切换快 2–5 倍
shim 机制有(延迟明显,尤其 monorepo)无(直接改 PATH)cd 项目瞬间生效,无卡顿
插件机制全部第三方 bash 脚本核心语言内置 + aqua/cargo/npm/go 等可信后端 + asdf fallback安全性更高,维护少
配置文件只支持 .tool-versions.tool-versions + mise.toml(更强大,支持 env/task)更灵活,取代 direnv
任务运行无(靠 Makefile/npm scripts)内置 task runner(mise run / mise task)Makefile 可以删了
环境变量管理无(需 direnv)原生 per-project env + secret backend 支持告别 direnv allow
模糊版本支持原生(node = “20” → 最新 20.x)更省心
社区迁移反馈部分团队坚守2025–2026 大量迁移(Rails → Phoenix、webdev 等)回不去的趋势
Windows 支持一般更好(原生)跨平台团队首选

快速上手 + 迁移路径

安装 mise

安装(macOS M 芯片 / Linux 通用)

1
2
# 官方推荐(最快)
curl https://mise.run | sh

加到 zsh(~/.zshrc 末尾)

1
eval "$(mise activate zsh)"

重载:

1
source ~/.zshrc

迁移 asdf

1
2
3
4
5
6
7
8
# 启用遗留文件兼容(.nvmrc / .python-version / .tool-versions 都认)
mise settings set legacy_version_file true

# 尝试自动导入已安装工具(有时需要 mise trust 进行目录信任)
mise import-asdf

# 生成 mise.toml(推荐长期使用,比 .tool-versions 强大)
mise generate mise.toml --tool-versions

迁移后删掉 asdf(删除操作有风险,请确认 mise 完全可用后再删除):

1
2
3
# 清理旧 shim 和目录
rm -rf ~/.asdf
# 从 ~/.zshrc 删除 asdf 相关行

项目级配置示例(mise.toml)

这也是 mise 和其他版本管理工具的最大区别,不仅接管了项目语言版本,还接管了项目环境变量和任务,相当于 asdf + direnv + Makefile

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[tools]
node     = "lts"          # 或 "20"、"22"、"latest"
python   = "3.12"
go       = "1.23"
bun      = "1"            # mise 内置 bun 支持很好
deno     = "2"

[env]
# 环境变量(支持 secret 引用,需要配置 backend)
APP_ENV       = "development"
DEBUG         = "true"
DATABASE_URL  = "{{secret:db-url}}"

# 任务(支持依赖、描述、环境覆盖)
[tasks]
dev = { run = "npm run dev", description = "启动开发服务器" }
test = { run = "npm test && pytest", depends = ["lint"] }
lint = "biome check --write . && ruff check --fix"
build = { run = "npm run build && go build ./cmd/server", env = { NODE_ENV = "production" } }

使用:

1
2
3
4
mise install                # 一次性安装所有工具
mise run dev                # 执行任务
mise x node@18 -- npm test  # 临时用指定版本执行
mise use --global node@lts  # 全局设置

高级用法

  • 自动激活mise activate 让 cd 项目时自动切换版本 + 加载 env,无需手动 source。
  • secret 管理:配合 1Password / Bitwarden / Age 等 backend,避免明文泄露 API key。
  • profile 支持.mise.development.toml / .mise.production.toml → 不同环境不同配置。
  • 实验性功能mise settings set experimental true 开启 beta 特性(如更智能的 progress bar 等)。

常见问题

  • 旧 asdf 插件不兼容 → mise 有 asdf backend 兜底,但优先用内置/aqua
  • shim 残留导致命令冲突 → 迁移后务必 rm -rf ~/.asdf/shims 并重启 shell
  • 版本 pinned 太死 → mise.toml 支持 “latest”、“lts”、"^20" 等模糊匹配,升级更方便
  • Windows 用户 → mise 原生支持更好,避免 WSL 里跑 asdf 的坑

结语

2026 年的开发环境管理,正在从“分散工具拼凑”向“统一前端”演进。mise 不是简单替换 asdf,而是把版本管理、env、task 打包成一个 Rust 写的现代化工具。如果你还在忍受 asdf 的 shim 延迟、插件维护负担、环境变量散乱,不妨花 15 分钟试试 mise。

参考