我用了很多年的 asdf 作为管理各种语言版本的工具,但是最近一次更新,asdf 多了一些变化,我也写了一篇文章介绍怎么升级的。在文章下方有小伙伴(lonelyhentxi) 给我推荐了 mise 这样一款使用 Rust 编写的多版本管理工具 mise,我大致的看了一下 mise,觉得是一个非常不错的项目,在这里再次感谢。
所以今天我就来介绍一下 mise,替换 mise 倒不是因为 asdf 不能用了,而是 Rust 在执行效率上确实要更快一些,比如我之前介绍的 Meilisearch,espanso 等等都是因为 Rust 编写,效率上都有所提升。
mise 是什么
mise 是 Rust 编写的一个多版本开发环境工具。
mise 可以无缝替换 asdf,具有 asdf 所有功能。asdf 会自动加载当前目录下的 .tool-versions
文件。mise 则使用稍微复杂一些的 toml
,命令为 .mise.toml
。
功能
mise 完全可以代替 asdf
- 官方支持多语言,包括 Bun, Deno, Erlang, Go, Java, Python, Node, Rust 等等
- 完全兼容 asdf 插件生态系统,通过插件支持更多开发工具
- 每个项目可以使用独立的运行时版本
- 自动切换对应的环境配置
- 支持 latest, lts 等版本标识
- 全局和项目级版本管理
mise 相比于 asdf 的优势
mise 完全兼容 asdf 的 .tool-version
文件,也会默认加载。如果想要实现 mise 特有的功能,则可以切换成 .mise.toml
配置
自动化安装
在 asdf 下,如果用户切换到目录,发现没有安装对应的版本,asdf 需要用户手动通过 asdf install
来安装,而 mise 会自动进行安装。
传递选项
mise 可以通过 .mise.toml
配置文件工具传递选项。例如给 Python 传递虚拟环境。
[tools]
python = { version = '3.10', virtualenv = '.venv' }
配置文件
# .mise.toml 示例
[tools]
node = '18.12.0'
python = '3.10.0'
[env]
NODE_ENV = 'development'
安装
安装 mise
curl https://mise.run | sh
如果是在 macOS 下,可以使用
brew install mise
将 mise 添加到 Shell 中
echo 'eval "$(~/local/bin/mise activate zsh)"' >> ~/.zshrc
source ~/.zshrc
使用
插件管理
node, python 等都是内置插件(core plugin),不需要额外添加。
mise plugins list-all
mise plugins add flutter
mise plugins ls
mise plugins update
版本管理以及安装对应版本
# 列举所有版本
mise ls-remote node
mise ls-remote python
# 列举安装版本
mise ls node
mise ls python
# 安装版本
mose install python@3.10.16
mise use --global node@18.12.0
mise use node@18.12.0
mise use node@lts
环境变量
mise set NODE_ENV=development
mise settings