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. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x