Why

系統上安裝的程式語言太多,每一種又有各自的版本管理工具(nvm, gvm, rvm, phpbrew…),對我來說一直都有相同的兩點困擾:

  • 不統一 :每個不同語言的版本管理工具都有各自的安裝、用法。一樣的語言版本管理卻要學習好幾種不同工具的用法,雖然每一個單獨來看都不難,但分開學習的成本也提高了。

  • 啟動很慢 :因為用了傳說中很慢的 oh-my-zsh ,再加上每個語言的套件管理工具之後,每次重新啟動一個新的 shell 的速度就真的慢到突破天際了。

直到 asdf 的出現解決了這個問題。

Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more

首頁一句簡單的介紹,說明了一切。asdf 提供了一個可擴充的版本管理框架,再透過插件的形式去支援各種語言,甚至是軟體(MongoDB、Postgres、Redis)。

Install

它的安裝很簡單,首先要先安裝一些依賴的工具:

For Ubuntu

1
$ sudo apt-get install automake autoconf libreadline-dev libncurses-dev libssl-dev libyaml-dev libxslt-dev libffi-dev libtool unixodbc-dev

For Mac

1
$ brew install coreutils automake autoconf openssl libyaml readline libxslt libtool unixodbc

然後把 asdf 專案 clone 到家目錄下

1
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.3.0

然後把它加到 .bashrc or .bash_profile 裡面

1
2
3
4
5
6
7
# For Ubuntu or other linux distros
echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bashrc
echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc

# OR for Mac OSX
echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bash_profile
echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bash_profile

Usage

使用也非常簡單,通常只要三個步驟就可以完成

  1. 安裝插件
  2. 安裝想要的指定版本
  3. 設定為預設值

這裡以安裝 golang 為例,其他語言其實大同小異。(部分的插件可能需要額外的依賴套件,可以參考各個插件的 README 說明)

步驟

先安裝想要的插件

1
2
# asdf plugin-add <name> <git-url>
asdf plugin-add golang https://github.com/kennyp/asdf-golang.git

完成後安裝指定版本

1
2
# asdf install <name> <version>
asdf install golang 1.8.1

最後指定預設要用的版本

1
2
# asdf global <name> <version>
asdf global golang 1.8.1

然後就可以開心的用 go version 檢查看看對不對囉!

補充

除了版本的安裝與切換以外, asdf 還支援在不同的目錄裏設定各自的語言版本,相信這對於各個不同專案之間的語言版本管理很有幫助。

如果想了解更多詳細用法,可以參考 asdf 的 github 專案 https://github.com/asdf-vm/asdf ,裡面有更多詳細說明。

參考資料