
vfox (version-fox) 是最近比較熱門的一個通用版本管理工具,使用 Go 語言進(jìn)行編寫,插件機制使用了 Lua 去實現(xiàn)擴展性. 目前 vfox 已經(jīng)支持管理大多數(shù)主流編程語言的版本,生態(tài)還算強大。在這里你可以看到目前 vfox 所支持管理的編程語言版本和工具 -> vfox-Available Plugins
Elixir 和 Erlang 社區(qū)一直以來都比較流行通過 asdf 去安裝和管理多版本環(huán)境。asdf 也是一個通用的版本管理工具,生態(tài)非常的豐富。
vfox 的版本管理上和 asdf 很像,均通過 .tool-versions 文件去管理項目級和全局的版本信息。這意味著如果你之前使用了 asdf,那么切換到 vfox,不會很困難。因為 vfox 和 asdf 的核心實現(xiàn)有有點不一樣,vfox 的執(zhí)行速度比 asdf 快了將近 5 倍~,官方文檔也給出了基準(zhǔn)測試結(jié)果:version-fox Comparison with asdf-vm

如果你之前使用 asdf 去管理維護(hù)多個 Erlang 和 Elixir 的版本,那么 vfox 也是一個不錯的選擇,值的一試。
本篇文章將會介紹如果通過 vfox 去安裝和管理多個 Erlang 和 Elixir 的版本。
安裝 vfox
vfox (version-fox) 的跨操作系統(tǒng)支持上很友好,這意味可以 Windows 和 Unix-like 系統(tǒng)上使用它。本篇文章的核心是通過 vfox 去安裝和管理多個 Erlang 和 Elixir 語言的版本。因為目前 vfox 的兩個管理 Erlang 和 Elixir 版本的插件實現(xiàn)上還沒有去支持在 Windows 操作系統(tǒng)下的管理,所以本篇文章的示例環(huán)境主要是 Ubuntu 20.04 Linux 環(huán)境。讓我們開始吧~
先安裝下 vfox (version fox):
echo "deb [trusted=yes] https://apt.fury.io/versionfox/ /" | sudo tee /etc/apt/sources.list.d/versionfox.list
sudo apt-get update
sudo apt-get install vfox
為了能讓 vfox 找到已經(jīng)安裝的 Elixir 和 Erlang 版本,需要將 vfox 默認(rèn)掛載到 shell 中。接下來修改下 shell 的配置 (以 Bash 為例):
echo 'eval "$(vfox activate bash)"' >> ~/.bashrc
你也可以參考這個官方文檔安裝 vfox -> https://vfox.lhan.me/guides/quick-start.html。安裝好 vfox 之后,我們再安裝下插件:
# 添加 vfox-erlang 插件
vfox add erlang
# 添加 vfox-elixir 插件
vfox add elixir
接下來我們就可以通過上面安裝好的兩個 vfox 插件 vfox-erlang 和 vfox-elixir 去安裝管理多個 Erlang 和 Elixir 的版本了。
通過 vfox-erlang 插件安裝 Erlang/OTP
因為 Elixir 依賴于 Erlang,所以在安裝 Elixir 之前,我們需要先安裝下 Erlang。Erlang 的安裝是通過對應(yīng)版本的源碼進(jìn)行安裝的,所以我們需要有對應(yīng)的編譯工具鏈,這里以 Ubuntu 20.04 為例:
sudo apt-get -y install build-essential autoconf m4 libncurses5-dev libwxgtk3.0-gtk3-dev libwxgtk-webview3.0-gtk3-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-11-jdk
接下來可以安裝 Erlang 了。
# 通過 vfox search 找到你想要安裝的版本
? vfox search erlang
Please select a version of erlang [type to search]:
-> v25.0.4
v24.3.4.16
v24.1.3
v24.0
v24.3
v24.3.2
v25.2
v27.0-rc2
v24.3.4.1
Press ↑/↓ to select and press ←/→ to page, and press Enter to confirm
# 當(dāng)然你也可以指定安裝一個版本,比如
vfox install erlang@26.2.2
理論上,你可以安裝任何一個出現(xiàn)在 https://github.com/erlang/otp/releases 的版本。因為是從源碼編譯安裝的, 所以安裝過程會花費點時間。當(dāng)你看到如下信息,就表明安裝完成了。
compile info.......
...
Install erlang@26.2.2 success!
Please use vfox use erlang@26.2.2 to use it.
我們使用 vfox 切換下到剛才安裝好的 Erlang/OTP 版本來驗證下安裝是否成功:
? vfox use erlang@26.2.2
Now using erlang@26.2.2.
? erl
Erlang/OTP 26 [erts-14.2.2] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit:ns]
Eshell V14.2.2 (press Ctrl+G to abort, type help(). for help)
1>
如果能正確喚醒 REPL,那么安裝就好啦~。接下來開始安裝 Elixir 吧~
安裝 Elixir
因為安裝 Elixir 也是從對應(yīng)版本的源碼進(jìn)行編譯安裝的,Elixir 的編譯需要依賴到 Erlang,我們先讓當(dāng)前使用的 shell 能找到剛才安裝好的 Erlang。
# 切換 Erlang 版本
? vfox use erlang@26.2.2
Now using erlang@26.2.2.
# 安裝 Elixir,將會使用對應(yīng)的 erlc 編譯器
> vfox install elixir@1.15.2
.........
.........
Generated ex_unit app
==> logger (compile)
Generated logger app
Generated eex app
==> iex (compile)
Generated iex app
Install elixir@1.15.2 success!
Please use vfox use elixir@1.15.2 to use it.
當(dāng)你看到 Install elixir@1.15.2 success!,也就意味著安裝成功了??梢酝ㄟ^ iex 確認(rèn)下安裝徹底成功:
? vfox use elixir@1.15.2
Now using elixir@1.15.2.
? iex
Erlang/OTP 26 [erts-14.2.2] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit:ns]
Interactive Elixir (1.15.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
如果你想要安裝其他版本的 Elixir,請確保當(dāng)前使用的 Erlang/OTP 版本和 Elixir 版本是兼容的,可以查看這個文檔去確認(rèn)兼容性: 《compatibility-and-deprecations.html#between-elixir-and-erlang-otp》。
設(shè)置全局使用版本
我們可以使用 vfox use -g xxx 設(shè)置默認(rèn)使用的 Erlang 和 Elixir 版本。
> vfox use -g erlang@26.2.2
> vfox use -g elixir@1.15.2
# 可以查看 .tool-versions 確認(rèn)設(shè)置是否完成
> cat ~/.version-fox/.tool-versions
erlang 26.2.2
elixir 1.15.2
最后
vfox 的兩個安裝管理 Erlang/OTP 和 Elixir 版本的插件同時也支持在 MacOS Darwin 下管理多個版本。你可以查看這個文檔去了解更多信息: https://github.com/version-fox/vfox-elixir?tab=readme-ov-file#install-in-darwin-macos-13.
Happy & funny!
本文由博客群發(fā)一文多發(fā)等運營工具平臺 OpenWrite 發(fā)布