Установка 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
Частые ошибки
nvm: command not found— терминал не перезапущен после установки, или nvm не добавлен в~/.bashrc/~/.zshrc- Глобальные пакеты пропадают при смене версии — каждая версия Node.js имеет свои глобальные пакеты. Решение:
nvm install NEW --reinstall-packages-from=OLD - Путают nvm и nvm-windows — на Windows
nvm useтребует права администратора - Нет
.nvmrcв проекте — командаnvm useбез аргумента не знает какую версию ставить - Устанавливают Node.js через официальный сайт + nvm — конфликт путей. Удалите системную установку перед использованием nvm
Практика
- Установить nvm, убедиться что
nvm --versionработает - Установить две разные LTS-версии и переключиться между ними
- Создать
.nvmrcв проекте, проверитьnvm use - Установить глобальный пакет (
npm i -g nodemon), переключить версию, убедиться что пакета нет - Настроить
nvm alias defaultна свою рабочую версию
Связанные темы
- Что такое Node.js — обзор Node.js
- npm basics — менеджер пакетов npm
- package.json — конфигурация проекта
- npx — запуск пакетов без установки
Ресурсы
🎓 Источник: Настройка среды 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
- NVM засоряет диск версиями — чистить старое через