Управление версиями 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 "${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. Надеюсь, статья была полезной. Другие публикации автора можно найти здесь.

ссылка на оригинал статьи https://habr.com/ru/company/timeweb/blog/541452/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *