Наш прошлый перевод про новые функции 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 "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/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 <15.4.0>
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. Надеюсь, статья была полезной. Другие публикации автора можно найти здесь.