Долгое время для управления версиями 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 | $ asdf list-all ruby |
и установить выбранную версию
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 файла — версия руби и гемсет указываются в разных файлах)
Комментарии