В нашей повседневной разработке мы часто сталкиваемся с такой ситуацией: есть несколько проектов, каждый с разными требованиями, и поэтому разные проекты должны зависеть от разных версий среды выполнения NodeJS. Без подходящего инструмента эта проблема была бы очень сложной.

nvmnvm появился в ответ на требования времени. nvm — это инструмент управления node на Mac, отчасти похожий на rvm для управления Ruby. Если вам нужно управлять node в Windows, официально рекомендуется использоватьnvmwилиnvm-windowsОднако nvm-windows — это не простой порт nvm, и они вообще не связаны. Но все команды, описанные ниже, можно выполнять в nvm-windows.


Разница между nvm и n

Ещё один инструмент управления версиями Node — это замечательнаяnкоманда TJ. Команда n существует как модуль Node, тогда как nvm — это внешний shell-скрипт, не зависящий от node/npm, поэтому команда n более ограничена по сравнению с nvm.

Поскольку пути модулей, установленных через npm, все находятся в/usr/local/lib/node_modules, при использовании n для переключения между разными версиями node глобальный каталог node/npm фактически является общим. Поэтому он не может хорошо удовлетворить требование «использовать разные глобальные модули node в зависимости от разных версий node».


Удаление глобально установленных node/npm

Установочный пакет node, загруженный с официального сайта, после запуска автоматически установится в глобальный каталог. Во время использования вы часто будете сталкиваться с некоторымипроблемами с правами доступа, поэтому рекомендуется удалить глобально установленные node/npm следующими способами.

Сначала откройте Finder, нажмитеshift+command+G, откройте окно «Переход к папке», введите по очереди следующие каталоги и после входа удалитеnodeиnode_modulesсвязанные файлы и папки:

  • Откройте/usr/local/lib, удалитеnodeиnode_modulesсвязанные файлы и папки
  • Откройте/usr/local/include, удалитеnodeиnode_modulesсвязанные файлы и папки
  • Если вы использовалиbrew install nodeдля установки NodeJS, то также нужно выполнить в терминалеbrew uninstall nodeкоманду для удаления
  • Проверьте все следующие в вашей личной домашней папке: папкиlocal、libиinclude, и удалите всеnodeиnode_modulesсвязанные файлы и папки
  • Откройте/usr/local/binи удалитеnodeисполняемые файлы

Возможно, вам также потребуется ввести некоторые дополнительные команды в терминале:

sudo rm /usr/local/bin/npm
sudo rm /usr/local/share/man/man1/node.1
sudo rm /usr/local/lib/dtrace/node.d
sudo rm -rf ~/.npm
sudo rm -rf ~/.node-gyp
sudo rm /opt/local/bin/node
sudo rm /opt/local/include/node
sudo rm -rf /opt/local/lib/node_modules

Установка в Windows

Первое и самое важное: обязательно удалите установленный NodeJS, иначе возникнут конфликты. Затем скачайтеnvm-windowsпоследний установочный пакет и установите его напрямую.


Установка в OS X/Linux

В отличие от Windows, нам не обязательно сначала удалять существующий NodeJS. Конечно, мы всё же рекомендуем сначала удалить его. Кроме того, вам также понадобится компилятор C++. В дистрибутивах Linux об этом обычно можно не беспокоиться; например, Ubuntu может напрямую использоватьbuild-essentialнабор; для OS X можно использоватьX-Codeинструменты командной строки. Просто выполните эту команду:

xcode-select --install

В Linux: (если это дистрибутив Debian)

sudo apt-get install build-essential

Затем мы можем использовать

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash

или

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash

чтобы скачать с удалённого сервераinstall.shскрипт и выполнить его. Обратите внимание, что этот номер версииv0.33.0будет меняться с развитием проекта. В любой момент, с помощьюофициальной последней команды установкиПроверить последнюю версию установки — полезно.


Установка нескольких версий node/npm

Например, если мы хотим установить версию 4.2.2, можно использовать следующую команду:

nvm install 4.2.2

nvm следует правилам именованиясемантического версионирования. Например, если вы хотите установить последнюю4.2версию серии, можно выполнить:

nvm install 4.2

nvm будет искать4.2.xсамую высокую версию для установки.

Вы можете использовать следующую команду, чтобы вывести список всех доступных версий на удалённом сервере:

nvm ls-remote

Для Windows это:

nvm ls available

Переключение между разными версиями

Каждый раз, когда мы устанавливаем новую версию Node, глобальное окружение автоматически установит эту новую версию по умолчанию.

nvm предоставляет командуnvm use. Использование этой команды аналогично командеinstall.

Например, переключиться на4.2.2:

nvm use 4.2.2

Переключиться на последнюю4.2.x:

nvm use 4.2

Переключиться на iojs:

nvm use iojs-v3.2.0

Переключиться на последнюю версию:

nvm use node

Каждый раз при выполнении переключения система связывает исполняемый файл node с файлом конкретной версии.

Мы также можем использовать nvm для установки псевдонимов для разных номеров версий:

nvm alias awesome-version 4.2.2

Мы даем4.2.2этому номеру версии имяawesome-version, и затем мы можем выполнить:

nvm use awesome-version

Следующая команда может удалить псевдоним:

nvm unalias awesome-version

Кроме того, вы также можете установитьdefaultв качестве этого специального псевдонима:

nvm alias default node

Список установленных экземпляров

nvm ls

Зеленая стрелка выше — это версия, используемая в данный момент, а установленные псевдонимы также перечислены ниже.


Использование разных версий Node в проектах

Мы можем создать.nvmrcфайл в каталоге проекта, чтобы указать используемую версию Node. Затем выполните в каталоге проектаnvm useи все..nvmrcСодержимое файла должно лишь следовать правилам семантического версионирования, упомянутым выше. Также есть инструмент под названиемavn, который может автоматизировать этот процесс.


Как следует использовать npm в нескольких средах?

Каждая версия Node поставляется с другой версией npm. Вы можете использоватьnpm -v, чтобы просмотреть версию npm. Глобально установленные пакеты npm не являются общими для разных сред Node, потому что это вызвало бы проблемы совместимости. Они размещаются в каталогах разных версий, например~/.nvm/versions/node/<version>/lib/node_modules</version>такой каталог. Это также избавляет нас от необходимости использоватьsudoв Linux. Поскольку это домашняя папка пользователя, это не вызовет проблем с правами доступа.

Но тут возникает проблема: нужно ли переустанавливать все установленные нами пакеты npm? К счастью, у нас есть способ решить нашу проблему. Выполните следующую команду, чтобы импортировать из конкретной версии в новую версию Node, которую мы собираемся установить:

nvm install v5.0.0 --reinstall-packages-from=4.2

Другие команды

Напрямую запустить конкретную версию Node

nvm run 4.2.2 --version

Запустить конкретную версию Node в подпроцессе текущего терминала

nvm exec 4.2.2 node --version

Подтвердить путь к определённой версии Node

nvm which 4.2.2

Установить другие реализации Node, такие как iojs (реализация Node на основе ES6, которая теперь объединена с Node)

nvm install iojs-v3.2.0

Быстрые команды:

  • nvm install nodeУстановить последнюю версию Node
  • nvm install iojsУстановить последнюю версию iojs
  • nvm install unstableУстановить последнюю нестабильную версию Node

Исходная ссылка: http://bubkoo.com/2017/01/08/quick-tip-multiple-versions-node-nvm/