我用了很多年的 asdf 作为管理各种语言版本的工具,但是最近一次更新,asdf 多了一些变化,我也写了一篇文章介绍怎么升级的。在文章下方有小伙伴(lonelyhentxi) 给我推荐了 mise 这样一款使用 Rust 编写的多版本管理工具 mise,我大致的看了一下 mise,觉得是一个非常不错的项目,在这里再次感谢。

所以今天我就来介绍一下 mise,替换 mise 倒不是因为 asdf 不能用了,而是 Rust 在执行效率上确实要更快一些,比如我之前介绍的 Meilisearchespanso 等等都是因为 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 [email protected]

mise use --global [email protected]
mise use [email protected]
mise use node@lts

环境变量

mise set NODE_ENV=development
mise settings