Управление версиями Node.js и NPM с помощью NVM
Наш прошлый перевод про новые функции 15-й версии Node.js был очень хорошо принят читателями «Хабра», поэтому сегодня мы решили продолжить тему и рассказать, как настроить NVM с версией Node.js 15 и NPM 7.
Версия Node.js 15 была выпущена 20 октября 2020 года. Она поставляется с npm 7 и множеством новых функций. Вы уже успели опробовать новую версию?
Но подождите минутку! Node.js 15 и npm 7 содержат критические изменения. Не повредит ли тогда обновление существующим проектам?

Теоретически может повредить!
К счастью, у нас есть NVM (Node Version Manager), который избавит нас от этой опасности. Давайте детально рассмотрим данный инструмент, чтобы без проблем обновить версии node.js и npm.
Установка NVM
nvm управляет версиями node.js и npm. Он устанавливается для конкретного пользователя и может быть вызван отдельно для каждой оболочки. nvm работает с любой POSIX-совместимой оболочкой (sh, dash, ksh, zsh, bash), в том числе на платформах: unix, macOS и windows WSL.
nvm можно установить с помощью команд curl или wget:
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash $ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
Скрипт install.sh клонирует репозиторий nvm в ~/.nvm и пытается добавить исходные строки из приведенного ниже фрагмента в нужный файл профиля ( ~/.bash_profile , ~/.zshrc , ~/.profile или ~/.bashrc ).
export NVM_DIR="$([ -z "$" ] && printf %s "$/.nvm" || printf %s "$/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
В ~/.bash_profile мы видим, что строки добавлены:
export NVM_DIR="/Users/fuje/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
Использование NVM
Итак, мы установили nvm. Теперь используем данную команду для установки последней версии node.js:
$ nvm install node Downloading and installing node v15.4.0. Downloading https://nodejs.org/dist/v15.4.0/node-v15.4.0-darwin-x64.tar.xz. ######################################################################## 100.0% Computing checksum with shasum -a 256 Checksums matched! Now using node v15.4.0 (npm v7.0.15)
В выходных данных из примера выше указано, что npm 7.0.15 используется вместе с node.js 15.4.0 . Проверим:
$ node -v v15.4.0 $ npm -v 7.0.15
Также мы можем указать нужную версию для установки. Семантический формат версии определяется SemVer:
$ nvm install 10.14.0 Downloading and installing node v10.14.0. Downloading https://nodejs.org/dist/v10.14.0/node-v10.14.0-darwin-x64.tar.xz. ######################################################################## 100.0% Computing checksum with shasum -a 256 Checksums matched! Now using node v10.14.0 (npm v6.4.1)
Если указанная версия уже была установлена, она не переустанавливается:
$ nvm install 10.14.0 v10.14.0 is already installed. Now using node v10.14.0 (npm v6.4.1)
Мы можем вывести на экран все установленные версии:
$ nvm ls -> v10.14.0 v10.15.0 v10.16.0 v12.16.0 v13.9.0 v15.4.0 system default -> 12.16.0 (-> v12.16.0) node -> stable (-> v15.4.0) (default) stable -> 15.4 (-> v15.4.0) (default) iojs -> N/A (default) unstable -> N/A (default) lts/* -> lts/fermium (-> N/A) lts/argon -> v4.9.1 (-> N/A) lts/boron -> v6.17.1 (-> N/A) lts/carbon -> v8.17.0 (-> N/A) lts/dubnium -> v10.23.0 (-> N/A) lts/erbium -> v12.20.0 (-> N/A) lts/fermium -> v14.15.1 (-> N/A)
В приведенных выше примерах вывода символ -> указывает, что текущая версия node.js — 10.14.0 . Стрелка также представляет значения для default ( 12.16.0 ), node ( 15.4.0 ) и stable ( 15.4.0 ).
nvm use заменяет текущую версию:
$ nvm use 12.16.0 Now using node v12.16.0 (npm v6.14.8) $ nvm use 10.16.0 Now using node v10.16.0 (npm v6.14.5) $ nvm use 13.9.0 Now using node v13.9.0 (npm v6.13.7) $ nvm use default Now using node v12.16.0 (npm v6.14.8) $ nvm use node Now using node v15.4.0 (npm v7.0.15) $ nvm use stable Now using node v15.4.0 (npm v7.0.15)
Возможно, вы спросите, как так получилось, что v10.16.0 использует более позднюю версию npm, чем v13.9.0 . Эту задачу можно решить с помощью следующих команд:
$ nvm use 10.16.0 $ npm install -g npm@6.14.5
Данная команда позволяет получить последнюю поддерживаемую версию npm для текущей версии Node.js:
$ nvm install-latest-npm
nvm use устанавливает нужную версию только для текущей оболочки. Если вы измените оболочку, только что обновленная версия node.js будет потеряна.
Как сделать определенную версию Node.js постоянной?
Версия по умолчанию — такая версия, которая распространяется на все оболочки.
Команда nvm alias позволяет установить версию по умолчанию.
$ nvm alias default 10.16.0
Для удобства можно создать файл .nvmrc , который принимает формат SemVer, node или default . После этого nvm use , nvm install , nvm exec , nvm run и nvm which будут использовать версию, указанную в файле .nvmrc , если в командной строке не указана другая.
$ cat .nvmrc 15.4.0 $ nvm use Found '/Users/fuje/.nvmrc' with version Now using node v15.4.0 (npm v7.0.15)
Мы можем проверить текущую версию с помощью следующей команды:
$ nvm current v15.4.0
ls-remote выводит на экран все доступные версии, но будьте готовы к очень длинному списку.
$ nvm ls-remote
Обратим внимание, что название версии в сокращенной форме значительно сокращает весь список.
$ nvm ls-remote 15 v15.0.0 v15.0.1 v15.1.0 v15.2.0 v15.2.1 v15.3.0 -> v15.4.0
nvm which указывает путь к исполняемому файлу, где nvm был установлен. Мы установили такие версии node.js, как 10.14.0 , 10.15.0 и 10.16.0 . Вот результаты nvm which :
$ nvm which 10.14.0 /Users/fuje/.nvm/versions/node/v10.14.0/bin/node $ nvm which 10.15.0 /Users/fuje/.nvm/versions/node/v10.15.0/bin/node $ nvm which 10.16.0 /Users/fuje/.nvm/versions/node/v10.16.0/bin/node $ nvm which 10.15 /Users/fuje/.nvm/versions/node/v10.15.0/bin/node $ nvm which 10.12 N/A: version "v10.12" is not yet installed. You need to run "nvm install 10.12" to install it before using it. $ nvm which 10 /Users/fuje/.nvm/versions/node/v10.16.0/bin/node
Указанную версию Node.js можно использовать непосредственно для запуска приложений:
$ nvm run 10.15.0 app.js
Как вариант, данная команда запускает node app.js с переменной PATH, указывающей на версию 10.15.0 .
$ nvm exec 10.15.0 node app.js
Если вам нужно больше nvm-команд, запустите команду help :
$ nvm --help
Обновление NVM
Мы можем использовать nvm для обновления node.js и npm. Но как обновить сам nvm ?
Перед обновлением у нас установлен nvm 0.34.0 .
Обновляем до версии 0.37.2.
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 13527 100 13527 0 0 23046 0 --:--:-- --:--:-- --:--:-- 23083 => nvm is already installed in /Users/fuje/.nvm, trying to update using git => => Compressing and cleaning up git repository => nvm source string already in /Users/fuje/.bash_profile => bash_completion source string already in /Users/fuje/.bash_profile => Close and reopen your terminal to start using nvm or run the following to use it now: export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
Как указано в выводе, нам нужно закрыть и снова открыть терминал, чтобы использовать новую версию:
$ nvm --version 0.37.2
По сравнению с версией 0.34.0 , в версии 0.37.2 добавлена функция nvm set-colors для вывода на консоль.

По умолчанию nvm ls показывает следующие цвета:

Установим новые цвета:
$ nvm set-colors cgYmW
nvm ls отображает вывод с новыми цветами:

Заключение
nvm упрощает управление версиями node.js и npm. Теперь мы точно готовы перейти на node.js 15 и npm 7. Надеюсь, статья была полезной. Другие публикации автора можно найти здесь.
- Блог компании Timeweb Cloud
- JavaScript
- Node.JS
Управление версиями Node.js с помощью nvm в Windows
Вопрос экономии времени и удобства окружения разработчика — штука сложная. Работая с Node.js, иногда приходится тестировать своё приложение не только в той версии, которую используете вы, но и в тех, что были выпущены до неё или даже после. В большинстве своём, это касается пакетов (библиотек), которые распространяются через npm. Разумеется, вы можете использовать для этих целей Travis CI, но этот инструмент создан не для этого.
Наиболее простым способом устанавливать и переключать версии Node.js на Linux является использование утилиты nvm. Для разработчиков, которые «сидят» на Windows, существует порт этой утилиты, хотя и менее продвинутый. Разбираемся в управлении версиями Node.js через консоль в Windows.
Что такое nvm?
nvm (Node Version Manager) — это довольно простой скрипт, который позволяет устанавливать, переключать и удалять версии Node.js на лету. Проще говоря, nvm даёт вам возможность держать на одной машине любое количество версий Node.js. При установке новой версии для неё создаётся отдельная директория, например, 5.0.0 или 4.2.2. При переключении версий скрипт подменяет путь до Node.js в PATH.
При этом нужно помнить, что глобальные пакеты для каждой версии свои и никак не пересекаются. Это значит, что если вы глобально установили пакет, используя Node.js версии 4.2.2 и переключились на версию 5.1.0, то этот же пакет вам придётся устанавливать повторно уже для этой версии.
Установка nvm
Напомню, что речь сейчас идёт про Windows, и установить nvm здесь так же «сложно», как и любую другую программу или игру. Для этого вам придётся перейти в репозиторий nvm-windows и загрузить установочный пакет. Далее процедура полностью стандартна, как и для любого другого установочного файла в Windows: выбираете директорию установки и несколько раз кликаете на «Далее».
Установка Node.js
Теперь, когда у вас установлен nvm, пришло время добавить новую версию Node.js. Для этого потребуется прочитать справку, которую можно вызвать, используя команду nvm .

Сначала посмотрим на список доступных для установки версий Node.js, который можно открыть командой $ nvm list available . В этом списке доступны как стабильные, так и нестабильные релизы.

Обратите внимание, что здесь не хватает 5-ой версии Node.js. Дело в том, что создатель nvm для Windows ещё не подготовил новый релиз, добавляющий 5-ую версию Node.js в этот список.
Итак, установим последнюю версию Node.js четвертой ветки. Для этого, к сожалению, потребуется полностью прописать версию Node.js, хотя в версии под Linux и OSX можно просто указывать мажорную цифру (4 или 5).
$ nvm install 4.2.2
Тоже самое можно проделать с пятой веткой:
$ nvm install 5.1.0
Помимо версии, при установке есть возможность указать разрядность, например, для установки Node.js 5.1.0 32-битной разрядности следует выполнить
$ nvm install 5.1.0 32
Переключение версий
Посмотрим на список уже установленных версий Node.js на вашей машине, выполнив в консоли команду $ nvm list :

Для того, чтобы начать использовать Node.js версии 4.2.2, нужно прописать в консоли $ nvm use 4.2.2 . После этого из консоли станет доступна именно эта версия Node.js и поставляемая вместе с ней версия npm:

Соответственно, чтобы переключиться на Node.js версии 5.1.0, нужно выполнить команду:
$ nvm use 5.1.0
Теперь, когда вы выполняете команду $ nvm list , в выводе будет присутствовать указатель текущей версии:

Создание синонимов
Я вынужден был создать этот заголовок в виду того, что «настоящий» nvm позволяет назначать установленным версиям Node.js синонимы. К сожалению, пока что nvm для Windows не умеет этого.
Немного про глобальные пакеты
Как я уже говорил в начале, nvm разделяет версии Node.js по директориям, и, из-за этого, устанавливаемые глобально пакеты доступны лишь в той версии, в которой они были установлены.
Для примера я установлю свой же пакет windows-ls в версии 4.2.2 и попытаюсь использовать его в версии 5.1.0. В итоге я получаю ошибку, говорящую о том, что такого пакета нет.

Итоги
Все мы знаем, что Windows — это не та платформа, на которую ориентированы разработчики инструментов, которые нужны веб-разработчикам. Примеров, отображающих эту ситуацию довольно много и для каждого они свои, поэтому приводить я их здесь не буду. Рассмотренная в этой статье утилита делает жизнь разработчикам на Windows чуточку лучше, позволяя сконцентрироваться на работе, а не загрузке, установке и удалении различных версий Node.js.
Делимся на оплату хостинга или кофе.
Чем чаще пью кофе, тем чаще пишу статьи.
Как поменять ноду

Главная СтатьиИзменение версии node в Windows
Поделиться в соцсетях:
Встречались ли вы с ситуацией, когда какой-нибудь ваш проект требует версию node.js меньше, чем у вас установлена. На UNIX системах переключить версию node сравнительно легко. А вот для Windows немного сложнее. Ниже описан один из самых лёгких способов это сделать.
Для начала качаем NVM (Node Version Manager) для Windows по ссылке. Там среди прочей информации о версиях, будут предложены несколько инсталлях, в том числе для обновления уже установленного NVM. Для случая «с нуля» выбираем nvm-setup.zip (или как он будет зваться в дальнейшем) и ставим. Дальше лучше перезагрузить систему.
Свидетельством успешной установки будет работоспособность в терминале команды nvm version . Она должна нам вывести нечто подобное:
nvm version 1.1.9
Теперь, если мы проверим наличие всех установленных версий node и текущую, введём nvm list
nvm list 16.13.1
Допустим, нам для проекта нужна версия node 14. Ставим её:
nvm install 14
Установится версия 14.19.0 — последняя в серии 14. Если хотим установить конкретную версию, указываем это в nvm-команде.
Сейчас, если мы посмотрим список установленных версий, то увидим следующее:
nvm list 16.13.1 14.19.0
Чтобы переключиться на нужную версию из уже имеющихся, вводим:
nvm use 14.19.0
Теперь эта версия будет актуальной и чтобы вернуться к прежней, используем те же команды.
Setting Your Node.js Version
By default, Render’s Node.js runtime uses version 14.17.0 .
Specify a different Node.js version in any of the following ways (in order of precedence):

-
Set the NODE_VERSION environment variable for your service in the Render Dashboard:
18.18.0
"engines": "node": ">=18.18.0 >
You can specify either a semantic version number (such as 18.18.0 ) or an alias (such as lts ).
Render uses the node-version-alias module to resolve version aliases and semver ranges.