mise: 按目录切换工具版本

解决什么问题 同一台机器上,不同项目要的工具版本常常不一样:一个项目锁 Node 24,另一个已经升到 Node 26;CI 用 Go 1.27,本机系统包里是别的版本。 常见的几种做法各有问题: 做法 问题 系统包管理器(pacman、Homebrew) 一个工具只有一个版本,全局生效;要 root 或会影响全系统;版本跟着发行版走,不跟项目走 每种语言一个版本管理器(nvm / fnm、pyenv、gvm、SDKMAN) 每个都要单独安装、单独配置 shell,切版本的方式各不相同 手动下载解压,改 PATH 换项目时要记得手动切,很容易用错版本 mise(读作 “meez”,原名 rtx)是一个统一的工具版本管理器,用 Rust 写的。它的核心功能是:在项目目录里写一个 mise.toml 声明要哪些工具、哪个版本,进入这个目录时自动用这些版本,离开就恢复。 一个工具管所有语言和 CLI。 它最早是 asdf 的替代品,兼容 asdf 的 .tool-versions 文件,但更快,也不需要为每个工具单独装插件。 三个功能 mise 现在做三件事,都写在同一个 mise.toml 里: [tools] go = "1.27.0" node = "24.21.0" task = "latest" golangci-lint = "2.14.0" [env] GOPROXY = "https://goproxy.cn,direct" [tasks.test] run = "go test ./..." [tools]:工具版本,这是主要功能。 [env]:进入目录时设置的环境变量,类似 direnv。 [tasks]:项目命令,mise run test 执行,类似 make 或 Task。 后两个是可选的,只用 [tools] 也完全可以。 ...

Created 20206-10-20 · Updated 21216-10-21 · 2 min · 376 words · -