В последнее время довелось много поработать с node.js. Разные проекты требуют разных версий ноды. Управлять этим зоопарком сильно помогает NVM. Но как бы ни было это удобно часто забываю переключить версию при переходе в папку другого проекта. Пора покончить с этим безобразием и переложить всю грязную рутину на плечи компьютера и я покажу как это сделать.
По счастью можно указать NVM какую версию использовать в данном проекте создав файл .nvmrc
в папке проекта. Например такой:
1 | $ cat .nvmrc |
Но чтобы NVM сожрал этот файл необходимо руками вызвать команду nvm use
, что неудобно. Особенно раздражает запустив обновление пакетов обнаружить, что они установились не в ту версию.
Что же я хочу?
Хочу я немногого — при смене папки на папку с файлом .nvmrc
автоматически переключать версию node.js на версию, указанную в этом файле и таким образом не отвлекаться на контроль за тем какая версию активна в данный момент.
Готовые решения
Так как в качестве шелла пользуюсь я zsh, то дальнейшее повествование именно о нём. Нехитрым гуглением обнаруживаем разные варианты решения. Например родное решение от авторов NVM или вот такой плагинчик к zsh — nvm-auto.
Что с ними не так?
Всё, что я нашёл просто адово тормозит. Любой переход из папки в папку занимает пару секунд. Это очень много — это жутко раздражает и такое решения я считаю нерабочим. Не понимаю — неужели кто-то этим решениями действительно пользуется?
Почему так медленно
Всё дело в том, что анализ проводится на мой взгляд довольно странным способом. Средствами nvm
запрашиваетс версия по умолчанию и версия требуемая и если они не совпадают, то запускается смена версии. Причём даже если нет файла .nvmrc
всё равно — запускается переключение на версию по умолчанию
Пилю свой велосипед
Блин проблема-то яйца выеденного не стоит. Как не взять руки любимый напильник? За дело!
1 | load-nvmrc() { |
Вот такой кусок надо добавить в свой файл .zshrc
. На смену папки вешается хук (строка 9), который и выполняет анализ ситуации и запускает nvm
если нужно.
Чем же эта конструкция лучше? Она быстрая! Вся эта балалайка запускаетс только если есть в наличии файл .nvmrc
и только если версия в нём отличается от текущей. Поэтому запускается редко, но метко.
Недостатком и расплатой за скорость является отсутствие возврата к версии по умолчанию при выходе из папки проекта — остаётся последняя выбранная версия. Но мне как-то нода сама по себе вне контекста какого проекта не нужна, поэтому мне это совершенно не важно, а высокая скорость работы и удобство с лихвой окупают этот небольшой недостаток.
Комментарии