© 2024 WebHive

ASDF - отличный менеджер версий языков программирования

Долгое время для управления версиями ruby и nodejs использовал соответственно RVM и NVM. Но сегодня с удивлением обнаружил такой пакет как ASDF и радости моей не было предела. Эта штука заменяет их обоих и не только их, но кучу
других.

Собственно не скажу, что я чем-то недоволен в RVM или NVM — оба пакета делают своё дело и делают его хорошо, но зачем использовать 2 разные программы, которые делают практически одно и тоже когда можно заменить их одной которая делает гораздо больше? Вопрос конечно риторический.

Я уже проверил работу ASDF на ряде своих проектов и каких-то видимых проблем с ними не обнаружил.

Установка

Собственно процесс установки прекрасно описан на странице проекта. Просто тупо клонируем реп в папку ~/.asdf — что может быть проще?

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

Ну и добавляем нужные строчки в автозагрузку вашей оболочки как написано на странице проекта.

После этого ASDF пока бесполезен ибо ничего не знает ни о каких языках программирования. Поддержка каждого языка осуществляется отдельным плагином, что в общем-то на мой вкус очень даже неплохо.

Ruby

Ставим плагин для поддержки ruby.

1
$ asdf plugin-add ruby https://github.com/asdf-vm/asdf-ruby.git

после этого мы можем посмотреть имеющиеся версии ruby

1
2
3
4
5
6
7
8
9
$ asdf list-all ruby
jruby-1.0.0RC1
jruby-1.0.0RC2
jruby-1.0.0RC3
jruby-1.0.1
...
2.4.1
2.4.2
2.5.0-preview1

и установить выбранную версию

1
$ asdf install ruby 2.4.2

Несомненным плюсом является поддержка конфигурационных файлов RVM, но только если версия ruby в них прописана только цифрами, в случае же полной записи с префиксом ruby ASDF нужную версию найти не может и нужно править конфиг. Так-же можно перенести уже установленные версии ruby из RVM банальным копированием «в лоб», что несомненно очень удобно.

Из минусов отмечу, что среди всего многообразия вариантов ruby машин в списке есть только jruby и MRI версии.

Относительным минусом можно назвать отсутствие поддержки gemset-ов, но этот функционал успешно реализован в bundler-е и особой проблемы не вижу.

Node.js

Плагин для nodejs

1
$ asdf plugin-add nodejs https://github.com/asdf-vm/asdf-nodejs.git

После установки плагина нужно ещё импортировать ключи

1
$ bash ~/.asdf/plugins/nodejs/bin/import-release-team-keyring

Ну, а дальше установка точно так-же как и для ruby. Node.js кстати тянет бинарные версии, поэтому установка проходит очень быстро. В отличие от NVM нет деления на текущие и lts версии и нет алиасов, поддержка которых была в случае NVM очень удобной.

Поддерживается формат файлов NVM, но как показала практика пользы от этого не очень много, т. к. в моём случае версия node.js в каждом проекте была прописана алиасом stable, который не поддерживается. Там-же где использовался явный номер версии версия была указана с префиксом v, что правильно для NVM, но ASDF такой формат не понимает.

Выводы

Планирую полностью переезжать на этот вариант менеджера языков. Мои потребности он покрывает полностью, прост в установке и настройке. Кроме того есть поддержка elixir, которую планирую проверить в ближайшее время.

Ещё одним плюсом упомяну то, что теперь в конфиге проекта можно сразу задавать несколько языков, что удобно для рельсовых проектов, где можно указать одновременно версии ruby и node.js. Итого вместо 3-х файлов получаем 1 (для RVM нужно 2 файла — версия руби и гемсет указываются в разных файлах)

Источники

Комментарии