Node.js
Как обновить Node.js на Linux и Ubuntu без поломки проекта
Короткий ответ: если Node.js нужен для разработки, безопаснее обновлять его через nvm, потому что так можно держать несколько версий и быстро откатиться. Если Node.js работает как системный сервис на сервере, сначала нужно понять, как он был установлен: через apt, NodeSource, snap, Docker или вручную
Главная ошибка в этом запросе — сразу выполнять случайную команду из интернета. На Linux одна и та же команда может обновить не тот Node.js, который реально используется проектом. Например, в терминале может запускаться версия из nvm, а сервис systemd может брать системный /usr/bin/node
Сначала проверьте текущую установку
Откройте терминал и выполните
node -v
npm -v
which node
which npm
Если путь похож на ~/.nvm/versions/node/..., Node.js установлен через nvm. Если путь /usr/bin/node или /usr/local/bin/node, это системная или ручная установка. Этот момент важен: обновлять нужно тем же способом, которым Node.js был поставлен
Дополнительно проверьте, не работает ли проект как сервис
systemctl list-units --type=service | grep node
systemctl list-units --type=service | grep pm2
Если проект запущен через pm2, systemd или Docker, обновление лучше делать в отдельное окно обслуживания, а не посреди активной работы
Способ 1: обновить Node.js через nvm
Если nvm уже установлен, это самый спокойный вариант для разработки
nvm install --lts
nvm use --lts
nvm alias default node
node -v
npm -v
Команда nvm install --lts ставит актуальную LTS-версию. Команда nvm use --lts переключает текущий терминал на нее. nvm alias default node делает новую версию основной для новых терминалов
Если вам нужна конкретная версия, укажите ее явно
nvm install 22
nvm use 22
nvm alias default 22
После переключения зайдите в папку проекта и поставьте зависимости заново
npm install
npm test
npm run build
Если проект старый, новая версия Node.js может вскрыть несовместимые зависимости. Поэтому обновление считается законченным только после запуска тестов или хотя бы сборки
Способ 2: обновить через NodeSource на Ubuntu
Если Node.js ставился как системный пакет, часто используется репозиторий NodeSource. Пример для версии 22
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
node -v
npm -v
Этот способ удобен для серверов, где не хотят использовать nvm для системных сервисов. Но у него есть минус: обычно активна одна системная версия Node.js, и откат сложнее, чем в nvm
Если на сервере есть production-проект, перед обновлением посмотрите, какой бинарник использует сервис
systemctl cat имя-сервиса
В ExecStart может быть прописан прямой путь к Node.js. Если путь не совпадает с тем, что показывает which node, после обновления сервис может продолжить запускаться на старой версии
Способ 3: обновить через apt из стандартного репозитория
Команды выглядят привычно
sudo apt update
sudo apt install nodejs npm
node -v
npm -v
Но у стандартных репозиториев Ubuntu часто не самая новая версия Node.js. Для учебных экспериментов этого иногда хватает, но для современных проектов с Vite, Next.js, NestJS или свежими пакетами лучше использовать nvm или NodeSource
Что делать с npm после обновления
Обычно npm приезжает вместе с Node.js. Но иногда нужно обновить npm отдельно
npm -v
npm install -g npm@latest
npm -v
На сервере не стоит механически обновлять глобальные пакеты, если проект завязан на старый pm2, npm или сборщик. Сначала проверьте проект локально или на тестовом окружении
Как понять, что обновление прошло нормально
Минимальная проверка
node -v
npm -v
node -e "console.log(process.version)"
Проверка проекта
cd /path/to/project
npm install
npm run build
npm test
Если приложение запускается через pm2, перезапустите процесс и посмотрите логи
pm2 restart all
pm2 logs
Если приложение запускается через systemd
sudo systemctl restart имя-сервиса
sudo journalctl -u имя-сервиса -n 100 --no-pager
Мини-практика
Создайте отдельную тестовую папку, установите Node.js через nvm, переключитесь на LTS-версию и выполните короткую проверку
mkdir node-update-check
cd node-update-check
node -e "console.log('Node.js работает:', process.version)"
Если команда выводит новую версию, терминал использует обновленный Node.js. После этого можно проверять рабочий проект
Частые ошибки
Обновили Node.js, но в терминале осталась старая версия Откройте новый терминал и проверьте which node. Если используется nvm, выполните nvm use --lts и nvm alias default node
Обновили версию для пользователя, а сервис работает на старой Проверьте systemctl cat имя-сервиса. Сервис может запускаться не из вашей shell-среды и не видеть nvm
Поставили Node.js одновременно через apt, snap и nvm Так появляется путаница с путями. Оставьте один основной способ установки, а остальные удалите только после проверки проектов
Проект перестал собираться после обновления Посмотрите package.json, package-lock.json и требования пакетов. Иногда нужно обновить зависимости, а иногда наоборот зафиксировать старую LTS-версию через .nvmrc
Что почитать дальше по Node.js
Если нужен общий маршрут по теме, откройте рубрику Node.js. Для соседних задач пригодятся эти разборы:
- Как удалить Node.js на Ubuntu и Linux полностью и без лишнего мусора
- Как обновить Node.js без боли
- Как обновить Node.js через консоль: Windows, macOS, Linux и nvm
- Как установить Node.js на Ubuntu и Linux: apt, nvm и проверка