Logo Craft Homelab Контакты Telegram
Node Version Manager (nvm): удобное управление версиями Node.js
Tue Oct 14 2025

Спасите, у меня снова сломался деплой! Или почему nvm — это не роскошь, а здравый смысл

Знаете, что объединяет опытного разработчика и новичка? Оба рано или поздно словят себя на мысли: «Блин, а какая версия Node у меня вообще стоит?» Только новичок паникует, а опытный спокойно набирает nvm use 16 и продолжает работать. Разница — в одном небольшом инструменте, который превращает адский цирк с версиями в пару секунд переключения.

Я помню свой первый проект на легаси-коде. Node 12, древний как мир, отказывался работать параллельно с новым pet-проектом на восемнадцатой версии. Переустанавливать каждый раз через brew? Удалять и качать заново бинарники? Серьёзно? Тогда коллега скинул мне одну команду установки nvm, и я понял: всё это время я занимался каким-то мазохизмом.

Что это вообще такое и почему все об этом говорят

Node Version Manager — штука до смешного простая по концепции. Представьте, что у вас в компьютере живёт несколько версий Node.js одновременно, но активна всегда только одна. Вам нужна другая? Говорите nvm об этом — и вуаля, переключились за секунду. Никаких глобальных переустановок, никаких конфликтов, никаких плясок с бубном.

По сути это менеджер версий, который работает на уровне пользователя и интегрируется в вашу shell. Bash, zsh, даже dash — всё поддерживается из коробки. MacOS, Linux, Windows через WSL — везде одинаково удобно. И что важно: инструмент не требует прав суперпользователя для установки пакетов. Вы больше не будете смотреть на sudo npm install -g с тихой грустью.

Возможности? Да сколько угодно. Устанавливайте любую версию Node — от музейных экспонатов до bleeding edge. Создавайте алиасы для быстрого доступа. Автоматически подхватывайте нужную версию из файла проекта. Переносите глобальные пакеты между версиями одной командой. Даже старичок io.js поддерживается, если вдруг понадобится археология.

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

Установка, которая не отнимет и пяти минут

Забудьте про сложные инструкции. Одна команда в терминале:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash

Скрипт сам всё сделает: скачает nvm в домашнюю директорию, пропишет нужные строчки в конфиг shell, настроит окружение. После перезапуска терминала вы уже можете пользоваться инструментом. Если что-то пошло не так (редко, но бывает), документация подскажет альтернативные варианты.

Первым делом стоит установить какую-нибудь версию Node:

nvm install 18

Пока качается, можете налить кофе. Готово? Теперь эта версия активна в текущей сессии терминала. Хотите проверить? node -v покажет правду.

Допустим, понадобилась ещё одна версия для старого проекта:

nvm install 14
nvm use 14
node -v  # v14.18.0 или около того

Переключились за пару секунд. Вернуться на восемнадцатую? nvm use 18 — и вы снова в будущем. Посмотреть, что установлено? Команда nvm ls выведет красивый список со звёздочкой напротив активной версии.

Магия .nvmrc или как не думать о версиях вообще

Вот где начинается настоящее удобство. Представьте: вы работаете над тремя проектами одновременно. Один требует Node 14, второй живёт на шестнадцатой, третий использует свежайшую LTS. Можно каждый раз вспоминать, что где нужно, и вручную переключаться. А можно просто создать в корне каждого проекта файл .nvmrc с одной строчкой — номером версии:

echo "16.13.0" > .nvmrc

Теперь при заходе в директорию проекта достаточно набрать nvm use без аргументов. Инструмент сам прочитает файл и переключится на нужную версию. Если её нет — предложит установить. Коллеги по команде делают то же самое, и у всех одинаковое окружение. Никаких «у меня работает, а у тебя нет».

Можно пойти дальше и автоматизировать процесс совсем. Добавьте в конфиг shell небольшую функцию, которая при смене директории проверяет наличие .nvmrc и переключается автоматически. Звучит сложно, но в документации nvm есть готовые сниппеты для разных оболочек. Скопировали, перезапустили терминал — и забыли про ручное переключение навсегда.

Я использую этот подход во всех проектах. Файл .nvmrc идёт в git вместе с остальным кодом, и новый человек в команде просто делает nvm use после клонирования репозитория. Проще некуда.

LTS, миграция пакетов и другие полезности

Node.js выпускает версии с долгосрочной поддержкой — так называемые LTS. Это стабильные релизы, на которых разумно держать production. nvm знает об этом и позволяет ставить LTS одной командой:

nvm install --lts

Не нужно гуглить, какая сейчас актуальная стабильная версия. Инструмент сам знает.

А ещё есть приятная фича для тех, кто пользуется глобальными npm-пакетами. Допустим, у вас стоит куча утилит — typescript, prettier, nodemon — и вы решили перейти на новую версию Node. Неужели ставить всё заново? Неа:

nvm install 18 --reinstall-packages-from=16

nvm установит Node 18 и автоматически перетащит все глобальные пакеты с шестнадцатой версии. Магия? Нет, просто продуманная функциональность.

Удалять старые версии тоже просто: nvm uninstall 14 — и место на диске освободилось. Хотите посмотреть, какие вообще версии доступны для установки? Команда nvm ls-remote выведет список от первых релизов Node.js до самых свежих ночных сборок. Можно даже io.js поставить, если вдруг ностальгия накрыла.

Когда что-то идёт не так (спойлер: редко)

Конечно, мир не идеален, и у nvm есть свои особенности. На macOS иногда приходится повозиться с настройкой shell, особенно если используете что-то экзотичное вроде fish. Для последнего, кстати, есть сторонние плагины — сам nvm его напрямую не поддерживает.

На Apple Silicon Mac старые версии Node могут капризничать. Решается через Rosetta, но это уже edge case. Alpine Linux со своей musl вместо привычной glibc тоже требует отдельной возни. Но честно? Большинство разработчиков работают на Ubuntu, Debian, macOS или Windows с WSL. Там всё просто летает.

Иногда возникает вопрос: а почему nvm не требует sudo для глобальных пакетов? Потому что Node устанавливается в домашнюю директорию пользователя, а не в системные папки. Это не баг, это фича. Никаких проблем с правами доступа, никаких конфликтов между пользователями системы.

Ах да, и если вдруг после установки nvm команда не работает — просто перезапустите терминал или выполните source ~/.bashrc (или ~/.zshrc в зависимости от shell). Скрипт установки прописывает настройки в конфиг, а shell нужно их подхватить.

Почему это не просто удобно, а необходимо

Разработка на Node.js без менеджера версий — это как вождение без ремня безопасности. Может, и прокатит, но зачем рисковать? Легаси-проект на старой версии, новый пет-проект на bleeding edge, работа с open source библиотекой, которая ещё не обновилась — всё это требует жонглирования версиями.

nvm делает этот процесс безболезненным. Вы перестаёте думать о версиях как о проблеме и начинаете воспринимать их как инструмент. Нужна одна версия — используете её. Нужна другая — переключаетесь. Проект живёт на определённой версии — прописываете в .nvmrc, и вся команда автоматически работает в одинаковом окружении.

Я видел команды, которые тратили часы на дебаг проблем, связанных с несовпадением версий Node. «У меня работает, а на CI падает» — классика жанра. nvm закрывает эту дыру раз и навсегда. Все используют одну версию, она явно прописана в проекте, никаких сюрпризов.

Плюс это просто экономит время. Не нужно гуглить, как удалить старую версию Node и поставить новую. Не нужно возиться с PATH и симлинками. Не нужно бояться, что после обновления системы что-то сломается. Всё работает изолированно, чисто, предсказуемо.

Вместо заключения

Если вы читаете это и думаете «хм, может, попробовать», — попробуйте прямо сейчас. Пять минут на установку, пара команд для знакомства, и вы больше не захотите возвращаться к жизни без nvm. Это один из тех инструментов, которые кажутся незаметными, пока не попробуешь, а потом удивляешься, как вообще раньше жил.

И да, я знаю про альтернативы — n, volta, fnm. У каждого свои фанаты и свои преимущества. Но nvm — это классика, проверенная временем и миллионами разработчиков. Он работает, он стабилен, он не требует изучения толстой документации. Просто инструмент, который делает свою работу и не мешает делать вашу.

Так что в следующий раз, когда коллега спросит: «Чёрт, а как мне переключиться на другую версию Node?», — вы уже знаете, что ответить. Одна команда, одна ссылка на установку, и ещё один человек станет чуточку счастливее в этом мире багов и деплоев.