Установка Node.js и nvm

Зачем нужно

Разные проекты требуют разных версий Node.js. nvm (Node Version Manager) позволяет устанавливать и переключать версии одной командой. Без nvm при работе над legacy-проектом (Node 16) и новым (Node 22) пришлось бы удалять и ставить Node.js вручную. nvm решает эту проблему полностью.

Где используется

  • Локальная разработка: переключение версий между проектами
  • CI/CD: точная версия для сборки и тестов
  • Командная работа: .nvmrc гарантирует единую версию у всех
  • Open-source: контрибьютор ставит нужную версию из .nvmrc

Предпосылки

  • Базовое понимание терминала (cd, ls)
  • Что такое Node.js — что такое Node.js и зачем

Установка nvm

macOS / Linux

# Установка nvm (проверь актуальную версию на github.com/nvm-sh/nvm)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

# Или через wget
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

# После установки перезапусти терминал или выполни:
source ~/.bashrc   # для bash
source ~/.zshrc    # для zsh

# Проверка установки
nvm --version
# 0.40.1

Windows

На Windows используется nvm-windows (отдельный проект):

# 1. Скачать nvm-windows: github.com/coreybutler/nvm-windows/releases
# 2. Запустить nvm-setup.exe
# 3. Перезапустить терминал

nvm version
# 1.1.12

Важно: nvm (Unix) и nvm-windows -- разные проекты с похожим синтаксисом, но разными внутренностями.


Основные команды nvm

Установка Node.js

# Список доступных версий
nvm ls-remote          # macOS/Linux
nvm list available     # Windows

# Установить конкретную версию
nvm install 22.12.0

# Установить последнюю LTS
nvm install --lts

# Установить последнюю Current
nvm install node

Переключение версий

# Показать установленные версии
nvm ls

# Переключиться на версию
nvm use 22
# Now using node v22.12.0 (npm v10.9.0)

nvm use 20
# Now using node v20.18.1 (npm v10.8.2)

# Использовать последнюю LTS
nvm use --lts

Версия по умолчанию

# Установить версию по умолчанию для новых терминалов
nvm alias default 22
# default -> 22 (-> v22.12.0)

# Теперь каждый новый терминал будет использовать Node 22
nvm alias default --lts  # или привязать к LTS

Проверка установки

# Версия Node.js
node -v
# v22.12.0

# Версия npm (устанавливается вместе с Node.js)
npm -v
# 10.9.0

# Где находится Node.js
which node          # macOS/Linux
where node          # Windows
# /home/user/.nvm/versions/node/v22.12.0/bin/node

# Версия npx
npx -v
# 10.9.0

LTS vs Current

Версии Node.js:

  Чётные (18, 20, 22, 24) → LTS (Long-Term Support)
    - Стабильность, баг-фиксы, security-патчи
    - Поддержка ~30 месяцев
    - Для production

  Нечётные (19, 21, 23) → Current
    - Новые фичи, экспериментальные API
    - Поддержка ~6 месяцев
    - Для экспериментов

Жизненный цикл LTS-версии:
  Current (6 мес) → Active LTS (12 мес) → Maintenance (18 мес) → End of Life

Пример (Node 22):
  Apr 2024 — Current
  Oct 2024 — Active LTS
  Oct 2025 — Maintenance
  Apr 2027 — End of Life
# Какие версии сейчас LTS?
nvm ls-remote --lts

# Рекомендация: для новых проектов — последняя LTS
nvm install --lts

.nvmrc — фиксация версии в проекте

Файл .nvmrc в корне проекта указывает нужную версию Node.js:

# Создать .nvmrc
echo "22" > .nvmrc

# Или с точной версией
echo "22.12.0" > .nvmrc

# Или использовать LTS alias
echo "lts/*" > .nvmrc
# Теперь в директории проекта:
cd my-project
nvm use
# Found '.nvmrc' with version <22>
# Now using node v22.12.0 (npm v10.9.0)

Автоматическое переключение

Добавь в ~/.bashrc или ~/.zshrc:

# Автоматический nvm use при входе в директорию
autoload -U add-zsh-hook

load-nvmrc {
  local nvmrc_path
  nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version
    nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
      nvm use
    fi
  elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}

add-zsh-hook chpwd load-nvmrc
load-nvmrc

Полезные команды

# Удалить версию
nvm uninstall 18

# Список алиасов
nvm alias

# Запустить команду с конкретной версией (без переключения)
nvm exec 20 node app.js
nvm exec 20 npm test

# Путь к конкретной версии
nvm which 22
# /home/user/.nvm/versions/node/v22.12.0/bin/node

# Переустановить глобальные пакеты из другой версии
nvm install 22 --reinstall-packages-from=20

Альтернативы nvm

fnm (Fast Node Manager):
  - Написан на Rust, работает быстрее nvm
  - Кроссплатформенный (Windows/macOS/Linux)
  - Совместим с .nvmrc
  - Установка: curl -fsSL https://fnm.vercel.app/install | bash

Volta:
  - Управление Node.js + npm + yarn версиями
  - Автоматическое переключение без hook-ов
  - Фиксация в package.json (поле "volta")
  - Установка: curl https://get.volta.sh | bash

asdf:
  - Мультиязычный менеджер версий
  - Node.js + Python + Ruby + Go + ...
  - Использует .tool-versions

Частые ошибки

  1. nvm: command not found — терминал не перезапущен после установки, или nvm не добавлен в ~/.bashrc/~/.zshrc
  2. Глобальные пакеты пропадают при смене версии — каждая версия Node.js имеет свои глобальные пакеты. Решение: nvm install NEW --reinstall-packages-from=OLD
  3. Путают nvm и nvm-windows — на Windows nvm use требует права администратора
  4. Нет .nvmrc в проекте — команда nvm use без аргумента не знает какую версию ставить
  5. Устанавливают Node.js через официальный сайт + nvm — конфликт путей. Удалите системную установку перед использованием nvm

Практика

  1. Установить nvm, убедиться что nvm --version работает
  2. Установить две разные LTS-версии и переключиться между ними
  3. Создать .nvmrc в проекте, проверить nvm use
  4. Установить глобальный пакет (npm i -g nodemon), переключить версию, убедиться что пакета нет
  5. Настроить nvm alias default на свою рабочую версию

Связанные темы

Ресурсы


🎓 Источник: Настройка среды Node.js, npm, git, eslint

  • 📅 2018-10-01 · YouTube · [Marp](../../../Documents/TimurShemsedinov/2018-10-01 — 💻 Настройка среды Node.js, npm, git, eslint (hSyA7tcNaCE).md)
  • Тезисы:
    • NVM или NVS — без них переключаться между версиями руками тяжело
    • nvm install ставит сразу несколько LTS, nvm use переключает в текущем шелле
    • Не путай nvm (Linux/macOS) и nvm-windows — разные проекты с похожим CLI
    • ESLint-конфиг общий для всех проектов через .eslintrc + eslint-config-standard

🎓 Источник: Летняя школа 2017 — Настройка среды

  • 📅 2019-11-14 · YouTube · [Marp](../../../Documents/TimurShemsedinov/2019-11-14 — 2. Летняя школа 2017 - Настройка среды git, node, npm, eslint, ci (cDcJ5uVsWX0).md)
  • Тезисы:
    • NVM засоряет диск версиями — чистить старое через nvm uninstall
    • NVS как альтернатива NVM (кроссплатформенная)
    • Можно собрать Node из исходников — полезно понять что внутри
    • nvm use без полной версии достаточно: nvm use 20 найдёт последнюю 20.x