整理日期:2026-07-27 分类:编程 / 开发工具 / 环境管理 版本:mise 2026.7.0 官方文档:mise.jdx.dev/ 一句话:一个 CLI 同时管理「开发工具版本 + 环境变量 + 任务」,可替代 nvm / pyenv / asdf / direnv / make
一、是什么?
mise(读作 meez ,法语 mise en place ,意为「把一切备齐、各归其位」)是一个多语言(polyglot)开发环境管理工具,用 Rust 编写。
它把过去需要一堆工具才能做的事,统一收进一个 CLI 和一个配置文件(仓库里签入的 mise.toml):
| 传统做法 | mise 统一接管 |
|---|---|
| nvm / fnm 管理 Node | mise use node@24 |
| pyenv 管理 Python | mise use python@3.13 |
| asdf 管理多语言运行时 | mise 原生支持 1000+ 工具 |
| direnv 加载环境变量 | [env] 段 |
| make / npm scripts 跑任务 | [tasks] 段 |
作者是 jdx(Jeff Dickey),mise 可以被看作 asdf 的现代替代品 ------生态兼容 asdf 插件,但更快、功能更全、配置用 TOML 而非 .tool-versions。
核心理念:在你写代码之前,把项目需要的工具、环境变量、任务都准备好。
二、三大核心能力
-
Dev Tools(工具版本管理)
- 安装/锁定/切换项目所需的语言运行时和 CLI 工具
- 进入目录自动切换版本(类似 asdf,比 nvm 更顺滑)
- 内置 1000+ 工具注册表(node、python、ruby、go、rust、java、deno、bun、terraform、kubectl、zig...)
-
Environments(环境变量)
- 从
mise.toml的[env]段、.env文件、shell 命令输出中加载环境变量 - 进目录自动注入,离开自动还原(取代 direnv)
- 从
-
Tasks(任务)
- 在
mise.toml里定义build/test/lint/deploy等命令 - 任务与它们需要的工具、环境变量绑定在一起,用
mise run <任务>执行
- 在
三、安装
3.1 安装 CLI
bash
# Linux / macOS(默认装到 ~/.local/bin,会自动加入 PATH)
curl https://mise.run | sh
# 验证
mise --version # mise 2026.7.0 ...
其他安装方式:brew install mise(macOS)、npm i -g @jdx/mise、apt / dnf / nix / snap、Windows 用 scoop install mise 或 winget install jdx.mise。
提示:
~/.local/bin不一定要手动加进 PATH,mise 在 激活(activate) 后会自动把自己目录加进 PATH。
3.2 激活 mise(交互式 shell 推荐)
mise exec 适合一次性命令,但交互式 shell 需要激活,让工具和环境变量随提示符自动加载:
bash
# zsh
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
# bash
echo 'eval "$(mise activate bash)"' >> ~/.bashrc
# fish
echo 'mise activate fish | source' >> ~/.config/fish/config.fish
另一种方式是 Shims (符号链接拦截命令),更适合 CI/CD、IDE、脚本。shims 不支持 activate 的全部特性。两者都不用也可以,直接
mise exec/mise run。
四、工具管理(Dev Tools)
4.1 安装并锁定版本
bash
# 在当前项目安装并写入 mise.toml
mise use node@24 python@3.13
# 设为全局默认
mise use --global node@24
# 只运行某版本,不写入配置(一次性)
mise exec node@26 -- node -v
mise exec python@3 -- python
执行后 mise.toml 会出现:
toml
[tools]
node = "24"
python = "3.13"
4.2 版本号语法
| 写法 | 含义 |
|---|---|
node@24 |
解析为 24 的最新补丁版本 |
node@24.18 |
锁定到 24.18.x |
node@24.18.0 |
完全锁定 |
node@lts/* 或 node@lts/hydrogen |
LTS 版本 |
node@latest |
最新版 |
python@3.13.14 |
具体版本 |
4.3 常用命令
bash
mise install # 安装 mise.toml 中声明的所有工具
mise ls # 列出已安装工具及当前激活版本
mise ls-remote node # 列出 node 可安装的远程版本
mise uninstall node # 卸载
mise current node # 显示当前生效版本
mise where node # 显示当前版本安装路径
4.4 全局 vs 项目级
mise use --global <tool>→ 写入全局配置(默认~/.config/mise/config.toml),对所有项目生效mise use <tool>→ 写入当前目录的mise.toml,只对该项目生效- 进入不同目录,mise 自动按就近的
mise.toml/.tool-versions切换版本
五、环境变量(Environments)
在 mise.toml 中用 [env] 段定义。进入目录时自动加载,离开时自动清理。
toml
[env]
NODE_ENV = "development"
API_URL = "http://localhost:3000"
# 从 .env 文件加载
_.file = ".env.local"
# 从 shell 命令输出获取
DATABASE_URL = "file:./dev.db"
GIT_SHA = "git rev-parse HEAD"
使用:
bash
mise env # 打印将被注入的环境变量
eval "$(mise env)" # 手动注入到当前 shell
mise exec -- node app.js # 在注入环境的前提下运行命令
这基本替代了
direnv的日常工作,且和工具版本管理合并在同一个文件里。
六、任务(Tasks)
用 [tasks] 段定义可复用的命令,mise run <任务名> 执行。
toml
[tasks.test]
run = "pytest"
[tasks.build]
run = "tsc"
[tasks.serve]
run = "python -m http.server 8080"
进阶用法:
toml
[tasks.build]
run = "tsc"
# 依赖:先跑 test 再 build
depends = ["test"]
[tasks.deploy]
run = "echo deploying..."
# 指定运行前需要的工具(任务与工具绑定)
[env]
NODE_ENV = "production"
执行:
bash
mise run test
mise run build
mise run # 列出所有可用任务
任务可以直接写 shell 脚本、或指向仓库里的脚本文件。
七、完整 mise.toml 示例(一站式配置)
toml
# mise.toml ------ 随仓库签入,团队共享同一套环境
[tools]
node = "24"
python = "3.13"
terraform = "1.9"
[env]
_.file = ".env.local"
NODE_ENV = "development"
[tasks.test]
run = "pytest"
[tasks.build]
run = "tsc"
depends = ["test"]
[tasks.serve]
run = "python -m http.server 8080"
新成员克隆仓库后只需:
bash
mise install # 装好所有工具
mise run test # 直接跑任务,环境已就位
八、与同类工具对比
| 工具 | 定位 | 不足 |
|---|---|---|
| mise | 工具+环境+任务 三合一 | 学习曲线略高(但统一后长期更省心) |
| asdf | 多语言版本管理 | 插件式、慢、无环境/任务能力 |
| nvm / fnm | 只管 Node | 单一语言 |
| pyenv | 只管 Python | 单一语言 |
| direnv | 只管环境变量 | 不管理工具版本 |
| make | 只管任务 | 语法晦涩、无环境隔离 |
结论:mise = asdf + direnv + make 的现代合并体,且 Rust 实现更快。
九、常用命令速查
bash
# 安装 & 激活
mise --version
mise activate zsh # 把激活命令写进 rc 文件后重新加载 shell
# 工具
mise use node@24 # 项目级安装并锁定
mise use --global node@24 # 全局默认
mise install # 安装配置里声明的全部工具
mise ls # 查看已装 / 当前版本
mise ls-remote <tool> # 可装版本列表
mise uninstall <tool> # 卸载
# 执行
mise exec node@26 -- node -v # 用指定版本跑一次性命令
mise run <task> # 跑任务
mise run # 列出任务
# 环境
mise env # 预览环境
mise current <tool> # 当前生效版本
十、实战建议
- 项目根目录签入
mise.toml,让团队每人mise install即可复现环境,告别「在我机器上能跑」。 - 全局只放常用默认 (如 node、python 的常用 LTS),项目特殊版本放到项目级
mise.toml。 - 用
[env]替代.env手写 export ,配合_.file = ".env.local"还能兼容现有.env流程。 - 任务代替零散脚本 :把
test/build/deploy收进mise.toml,mise run xxx比记住一长串命令更稳。 - 迁移 asdf :mise 兼容 asdf 插件和
.tool-versions文件,可渐进式替换,不必一步到位。
参考链接
- 官网 / 文档:mise.jdx.dev/
- 安装:mise.jdx.dev/installing-...
- 工具管理:mise.jdx.dev/dev-tools/
- 环境变量:mise.jdx.dev/environment...
- 任务:mise.jdx.dev/tasks/
- 注册表(1000+ 工具):mise.jdx.dev/registry