Установка нескольких версий NodeJS на сервер через NVM
По дефолту на сервер можно установить только одну версию NodeJS, но часто бывает, что на сервере несколько проектов, которые работают только на разных версиях. Чтобы это обойти накостыляли годное решение — Node Versionodejsn Manager (NVM). С помощью него можно установить сразу несколько версий NodeJS и легко переключатся между ними.
Все действия ниже будут производится в Debian 11 с Bash. Но установка возможна почти везде, где-то есть свои ньюансы при установке, использовании и интеграцией с оболочкой. Подробнее по ссылке выше. Там же еще куча всякой инфы.
Установка NVM
Для установки NVM и установки ноды через него не нужны админские права. Можно все делать под обычным юзером.
Для начала убедимся, что у нас уже стоит NodeJS версией посвежее:
$ node -v
v20.5.1
Скачиваем скрипт установки и сразу запускаем его (номер последней версии можно глянуть тут):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.6/install.sh | bash
В процессе установки увидим кому-то важную инфу, и что он загадил .bashrc
текущего юзера (последние 3 строчки):
А именно:
- определяется переменная окружения NVM_DIR,
- подключается сам NVM,
- подключаются автодополнения баша.
Сам NVM по дефолту клонируется в директорию ~/.nvm
.
Использование NVM
Для подключения NVM нужно подтянуть свежий .bashrc
. Для этого перелогиниваемся или сразу подтягиваем свежую версию через . .bashrc
).
Не забываем, что .bashrc
подгружается только при логине под юзером, если будете запускать что-то скриптами или под другим юзером, то нужно подгружать NVM самостоятельно.
Установка нужных версий
Не обязательно указывать конкретную версию, можно указать только номер мажорной версии:
$ nvm install 12
Downloading and installing node v12.22.12…
Downloading https://nodejs.org/dist/v12.22.12/node-v12.22.12-linux-x64.tar.xz…
Computing checksum with sha256sum
Checksums matched!
Now using node v12.22.12 (npm v6.14.16)
Creating default alias: default -> 12 (-> v12.22.12)
$ nvm install 16
Downloading and installing node v16.20.2…
Downloading https://nodejs.org/dist/v16.20.2/node-v16.20.2-linux-x64.tar.xz…
Computing checksum with sha256sum
Checksums matched!
Now using node v16.20.2 (npm v8.19.4)
Выше установили 12 и 16 версию ноды. Первой установленной версии присваивается алиас default
. Системная версия ноды никуда не девается и доступна под алиасом system
.
Получить список всех доступных версий для установки можно получить через nvm list-remote
.
Список установленных версий можно глянуть через nvm ls
:
Тут видим список установленных версий и доступных последних LTS версий для установки, а стрелкой указана текущая версия. В левой колонке алиасы версий.
Переключение между версиями
Переключение между версиями производится так:
nvm use <номер_версии>|<алиас>
Например, чтобы переключится на 12 версию, пишем:
$ nvm use 12
Now using node v12.22.12 (npm v6.14.16)
Проверяем:
$ node -v
v12.22.12
Супер! Все работает. Теперь можем запускать наш говнокод с нужной версией ноды. Причем можем использовать разные версии под одним юзером.
Запуск под нужной версией
А еще можно сразу запустить скрипт/команду в подоболочке с нужной версией ноды так:
nvm exec <версия> <команда>
Например:
$ nvm exec 16 node -v
Running node v16.20.2 (npm v8.19.4)
v16.20.2
Так же через NVM можно узнать путь к бинарнику определенной версии ноды и напрямую юзать нужную версию без переключения на нее:
$ nvm which 16
/home/user/.nvm/versions/node/v16.20.2/bin/node
$ /home/user/.nvm/versions/node/v16.20.2/bin/node -v
v16.20.2
.nvmrc
Если ваш проект использует только определенную версию ноды, то можно создать в директории запуска файл .nvmrc
и запихнуть туда версию/алиас. После этого в командах NVM можно не указывать их:
$ cat .nvmrc
16
$ nvm use
Found '/home/user/myproject/.nvmrc' with version <16>
Now using node v16.20.2 (npm v8.19.4)
Версия ноды в .nvmrc
будет использоваться для nvm use
, nvm install
, nvm exec
, nvm run
, и nvm which
.