Ваши проекты требуют разных версий Node.js? С nvm это не проблема! Рассказываем, как установить nvm (Node Version Manager) на Ubuntu 24.04, как устанавливать и управлять версиями Node.js через nvm, как интегрировать nvm с VS Code.
Введение
Node.js стремительно развивается, и одновременная работа над проектами с разными требованиями к версиям среды — обычная практика. В этой статье мы разберём, как профессионально использовать nvm (Node Version Manager) на Ubuntu 24.04 — выходя за рамки базовой установки.
Когда нужен nvm
При установке Node.js через системные пакеты (apt) вы получаете фиксированную версию, которая может не соответствовать требованиям проектов nwm решает сразу три проблемы:
- Параллельное существование версий — можно одновременно работать с проектами на Node.js 16.x (legacy), 22.x (LTS) и 24.x (Current).
- Изоляция глобальных пакетов — установка с npm install -g создаёт отдельные окружения для каждой версии Node.js, предотвращая конфликты зависимостей.
- Безопасная установка без sudo — пакеты устанавливаются в домашнюю директорию пользователя, что исключает риски повреждения системных файлов.
Безопасная установка с верификацией
Первый шаг — удаление существующих версий Node.js, установленных стандартным способом, так как пакеты nodejs и npm из репозиториев Ubuntu могут конфликтовать с версиями, управляемыми через nvm:
sudo apt purge --auto-remove nodejs npm -y
rm -rf ~/.npm ~/.node-gyp
Флаг --auto-remove удаляет неиспользуемые зависимости, а очистка ~/.npm исключает проблемы с кешем.
После этого импортируйте ключ разработчиков nvm:
gpg --keyserver hkps://keys.openpgp.org --recv-keys 255F6A817D26E3529C841FD17E2C2D7C80C596B2
Затем загрузите и верифицируйте скрипт:
curl -s -o install.sh https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh
gpg --verify install.sh
Вывод Good signature гарантирует, что скрипт не был изменён злоумышленниками.
После верификации выполните скрипт install.sh — он установит nvm в систему:
bash install.sh
source ~/.bashrc
Что происходит:
- скрипт клонирует репозиторий nvm с GitHub в ~/.nvm;
- добавляет инициализацию nvm в ~/.bashrc (или ~/.zshrc);
- source применяет изменения без перезапуска терминала.
Теперь настройте nvm для работы в Ubuntu 24.04. Следующие команды добавляют конфигурацию в файл ~/.profile (который выполняется при входе в систему) для управления загрузкой nvm:
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.profile
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" --no-use' >> ~/.profile
Флаг --no-use — ключевой компонент этой команды для оптимизации: он ускоряет запуск терминала в Ubuntu 24.04, откладывая полную инициализацию nvm до первого обращения к Node.js. Вместо загрузки всех компонентов при старте оболочки (что занимает 200-500 мс), nvm активируется только при первом вызове node, npm или nvm, экономя время при частом открытии терминалов.
Установка разных версий
Для проектов с долгосрочной поддержкой устанавливайте только LTS-версии, например:
nvm install --lts=hydrogen # Node.js 18.x
nvm install --lts=iron # Node.js 20.x
Кодовые имена (Hydrogen, Iron) помогают однозначно идентифицировать ветку, когда несколько LTS-версий активны одновременно.
Работа с .nvmrc
Файл .nvmrc — это текстовый файл в корне проекта, содержащий номер версии Node.js, необходимой для его работы.
Создайте его в корне проекта:
echo "20" > .nvmrc
Команда запишет в файл, что проект требует Node.js версии 20.x. Можно указать и более точную версию, например 20.12.2.
Затем настройте оболочку на автоматическое переключение версии Node.js при переходе в директорию проекта, в данном случае Zsh:
autoload -U add-zsh-hook
load-nvmrc() {
if [[ -f .nvmrc ]]; then
nvm use --silent
fi
}
add-zsh-hook chpwd load-nvmrc
Автоматическое переключение версии Node.js при входе в директорию проекта избавляет от необходимости помнить и вручную вводить команду nvm use и предотвращает ошибки, которые могут возникнуть, если версия Node.js в системе не соответствует требованиям проекта. Например, если проект требует Node.js 20, а активирована версия 18, то могут возникнуть ошибки при запуске, так как некоторые модули или синтаксис могут быть недоступны.
Для Bash настройка аналогична, но использует другой механизм. Можно использовать переменную PROMPT_COMMAND или переопределить cd.
Пример для Bash (добавить в ~/.bashrc):
load-nvmrc() {
if [[ -f .nvmrc ]]; then
nvm use --silent
fi
}
cd() {
builtin cd "$@"
load_nvmrc
}
Или более безопасный вариант (так как переопределение cd может нарушить работу других скриптов):
load_nvmrc() {
if [[ -f .nvmrc ]]; then
nvm use --silent
fi
}
export PROMPT_COMMAND="load_nvmrc; $PROMPT_COMMAND"
Перенос глобальных пакетов
При обновлении версии Node.js nvm может переносить глобальные пакеты из текущей версии в новую:
nvm install 22.2.0 --reinstall-packages-from=20
При выполнении nvm скопирует список пакетов и установит их в новой версии (22.2.0). Это сохранит все инструменты без ручной переустановки.
Обратите внимание
nvm установит версии из исходной установки, но некоторые из них могут быть не совместимы с новой версией Node.js, поэтому после переноса проверьте работу ключевых инструментов.
Что не переносится:
- локальные конфигурации (файлы в ~/.config/package-name/ нужно копировать вручную),
- скрипты инициализации (например, хуки npm init в ~/.npm-init.js),
- сертификаты и ключи.
Интеграция с VS Code
Интеграция nvm с VS Code решает проблему рассинхронизации сред выполнения JavaScript между редактором и терминалом.
Сначала установите расширение nvm в VS Code (автор devine-davies), затем добавьте в главный конфигурационный файл редактора (settings.json):
"nvm.path": "/home/$USER/.nvm"
"nvm.defaultVersion": "20",
"nvm.autoSwitch": true
Расширение автоматически ищет установленные версии в ~/.nvm/versions/node и использует указанную в .nvmrc проекта. Параметр "nvm.defaultVersion": "20" устанавливает версию по умолчанию — она будет использоваться, если в проекте отсутствует .nvmrc. Самый важный параметр — "nvm.autoSwitch": true — включает автоматическое обнаружение файла .nvmrc при открытии проекта или изменении рабочей директории.
Теперь VS Code будет автоматически находить .nvmrc и переключать версию в интегрированном терминале.
Читайте в блоге:
- Как установить .deb-пакет на Ubuntu 24.04: все способы
- Настройка NGINX на Ubuntu 24.04 LTS: от первого запуска до HTTPS
- Docker на Ubuntu 24.04: установка, настройка, запуск контейнеров