developer 神器 runtime manager: mise
Introduction
對於開發者而言
在開發的第一步是要先把 runtime 裝起來
比如說 python/golang/node.js …
如果開發者用到多個 project/多個版本 通常會借助 runtime manager
以下列出常見的 runtime manager
python: pyenv
golang: gvm
node.js: nvm
這時會發現一件事 不同的 runtime 就有不同的 runtime manager
不同的 runtime manager 就有不同的操作方式
於是一個能 handle 大部分 runtime 的 runtime manager
就很方便了
mise:
mise 作為一個 tool 來集中管理你的 runtime
除了剛剛的例子外 python,golang/node.js
像是 awscli/ansible/gcloud 也能支援
所以不只 developer, 對於 operator 也是很有幫助
還支援設定 environments & tasks (能夠讓你取代 make)
他能夠支援的 tool 可以參考 backends
利用 mise 管理的 runtime 可以是 global level
也可以是 directory level 切換不同 directory, mise 會自動幫你切換 directory 設定的 runtime 版本
有了 mise 之後
要安裝 runtime 會變得超級簡單
在統一團隊之間的 runtime 也變得非常容易
install mise
安裝 mise 及 activate (讓 mise 能夠幫你管 runtime)
以下環境是以 linux 為範例
如果環境不同 可以參考官方 doc
# install mise
curl https://mise.run | sh
# set auto activate mise
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
install runtime
get info about runtime
首先先了解 mise 能夠幫忙管理哪些 runtime 及版本
mise ls-remote --all
# grep keyword "python"
mise ls-remote --all | grep python
install runtime to global
嘗試安裝 python 3.13.5 在 global
亦即不管你在哪個 workdirectory 都是使用此版本
mise 會將設定寫在 ~/.config/mise/config.toml
除了用 mise 去指定外, 直接編輯 toml 也是可以的
mise use --global python@3.13.5
install runtime to directory
現在假設有個 dir1 想要使用 python 3.12.11 我們到該 directory root 下
mise use python@3.12.11
mise 會在此處產生一個 mise.toml
我們設定的 runtime 版本就會寫在此
另外也可以看到 directory level 會優先於 global level
$ cat mise.toml
[tools]
python = "3.12.11"
$ python3 -V
Python 3.12.11
那進到 sub directory 會發生什麼事?
dir1/sub1$ python3 -V
Python 3.12.11
可以看到依舊是 Python 3.12.11
mise 會自動 lookup top directory 的 mise.toml
如果找不到 就會使用 global 的 config
install runtime from mise.toml
如果把 mise.toml
放在 git repo 中的 root 位置
就等於宣告該 repo 要使用的 runtime 版本
因此只要把 mise.toml
commit 到 git 內
在 team member 之間要確保版本一致就相當簡單
再也不會有人使用不同的 runtime 去開發造成環境不一致產生的問題了
對於其他 member 而言
要安裝 runtime 只要下 以下指令即可
mise trust # allow mise use this mise.toml
mise install # this is option
Conclusion
對於 developer/operator/devops/sre 而言
mise 是非常方便的工具
關於 envrironments and tasks 就讓大家自行挖掘如何使用
如果你跟我一樣之前是 asdf, 那換到 mise 一定是非常舒服的事情
因為他的目標就是取代 asdf
他比 asdf 容易使用且更加的強大
let’s happy developing