n
– интерактивное управление версиями Node.jsУправление версиями Node.js: никаких подоболочек, никакой настройки профиля, никакого запутанного API, просто простой .
n
– интерактивное управление версиями Node.js n
поддерживается в macOS, Linux, включая подсистему Windows для Linux, и в различных других unix-подобных системах. Он написан как сценарий BASH, но не требует использования BASH в качестве командной оболочки.
n
не работает в собственных оболочках Microsoft Windows (например, PowerShell), Git для Windows BASH или с Cygwin DLL.
Если у вас уже установлен Node.js, простой способ установить n
— использовать npm
:
npm install -g n
Корневым расположением по умолчанию, используемым при запуске n
является /usr/local
, где обычный пользователь не имеет разрешения на запись. Вы можете столкнуться с такой же ошибкой разрешения при использовании npm для установки глобальных модулей, как в приведенной выше команде. У вас есть три основных варианта:
n
использовать пользовательское местоположение, где у вас есть права на запись (см. N_PREFIX
)sudo
перед командой, чтобы запустить ее от имени суперпользователя n
кэширует версии Node.js в подкаталоге n/versions
. Активная версия Node.js устанавливается в подкаталоги bin
, include
, lib
и share
.
Чтобы стать владельцем системных каталогов (вариант 1):
# make cache folder (if missing) and take ownership
sudo mkdir -p /usr/local/n
sudo chown -R $(whoami) /usr/local/n
# make sure the required folders exist (safe to execute even if they already exist)
sudo mkdir -p /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share
# take ownership of Node.js install destination folders
sudo chown -R $(whoami) /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share
Если npm
еще недоступен, один из способов запустить установку — загрузить и запустить n
напрямую. Чтобы установить lts
-версию Node.js:
curl -fsSL https://raw.githubusercontent.com/tj/n/master/bin/n | bash -s install lts
# If you want n installed, you can use npm now.
npm install -g n
Если вам не нужна поддержка обновлений самого n
вы можете просто сохранить загрузку:
curl -fsSL -o /usr/local/bin/n https://raw.githubusercontent.com/tj/n/master/bin/n
chmod 0755 /usr/local/bin/n
n install lts
В macOS с Homebrew вы можете установить формулу n.
brew install n
Или в macOS с MacPorts вы можете установить порт n:
port install n
В Linux и macOS n-install позволяет выполнить установку непосредственно с GitHub; например:
curl -L https://bit.ly/n-install | bash
n-install устанавливает для PREFIX
и N_PREFIX
значение $HOME/n
, устанавливает n
в $HOME/n/bin
, изменяет файлы инициализации поддерживаемых оболочек для экспорта N_PREFIX
и добавляет $HOME/n/bin
в PATH
и устанавливает последнюю версию LTS-версия Node.js.
В результате как сам n
, так и все версии Node.js, которыми он управляет, размещаются в одном, опционально настраиваемом каталоге, который позже можно удалить с помощью прилагаемого сценария n-uninstall
. n-update
обновляет n
до последней версии. Дополнительные сведения см. в репозитории n-install.
Переход от предыдущей версии Node.js, установленной в другое место, может потребовать нескольких дополнительных шагов. См. документацию по изменению местоположения узла, где представлен пошаговый пример перехода от использования Homebrew к использованию n
для управления Node.js.
У вас проблема с несколькими версиями, если после установки узла вы видите, что «установленные» и «активные» местоположения различаются:
% n lts
copying : node/20.12.2
installed : v20.12.2 to /usr/local/bin/node
active : v21.7.3 at /opt/homebrew/bin/node
Просто выполните n <version>
, чтобы загрузить и установить версию Node.js. Если <version>
уже загружена, n
установится из ее кеша.
n 10.16.0
n lts
n
самостоятельно, чтобы просмотреть скачанные вами версии, и установите выбранную версию.
$ n
node/4.9.1
ο node/8.11.3
node/10.15.0
Use up/down arrow keys to select a version, return key to install, d to delete, q to quit
(Вы также можете использовать j и k для выбора следующей или предыдущей версии вместо использования стрелок или ctrl+n и ctrl+p .)
Если версия активного узла не меняется после установки, попробуйте открыть новую оболочку на случай, если увидите устаревшую версию.
Существует множество способов указать целевую версию Node.js для n
команд. Большинство команд используют последнюю соответствующую версию, а n ls-remote
выводит список нескольких соответствующих версий.
Числовые номера версий могут быть полными или неполными, с необязательной начальной буквой v
.
4.9.1
8
: версии 8.xyv6.1
: версии 6.1.xЕсть этикетки для двух особенно полезных версий:
lts
: новейший официальный выпуск долгосрочной поддержки.latest
, current
: новейший официальный релиз Существует auto
метка для чтения целевой версии из файла в текущем каталоге или любом родительском каталоге. n
ищет по порядку:
.n-node-version
: версия в одной строке. n
..node-version
: версия в одной строке. Используется несколькими инструментами: использование версии узла..nvmrc
: версия в одной строке. Используется nvm
.engine
как показано ниже. Метка engine
ищет файл package.json
и считывает поле engines
, чтобы определить совместимый Node.js. Требуется установленная версия jq
или node
и используется npx semver
для разрешения сложных диапазонов.
Имеется поддержка именованных потоков релизов:
argon
, boron
, carbon
: кодовые названия для потоков релизов LTS.Эти псевдонимы поддержки Node.js можно использовать, но просто преобразуйте их в последнюю соответствующую версию:
active
, lts_active
, lts_latest
, lts
, current
, supported
Форма последней версии предназначена для указания других доступных выпусков с использованием имени папки удаленной загрузки, за которым может следовать полная или неполная версия.
nightly
test/v11.0.0-test20180528
rc/10
Удалите некоторые кэшированные версии:
n rm 0.9.4 v0.10.0
Удаление всех кэшированных версий, кроме установленной:
n prune
Удалите установленный Node.js (не влияет на кэшированные версии). Это может быть полезно для возврата к системной версии узла (если он находится в другом месте), или если вы больше не хотите использовать узел и npm, или переключаетесь на другой способ управления ими.
n uninstall
Существует три команды для работы напрямую с загруженными вами версиями Node.js без переустановки.
Вы можете указать путь к загруженной версии node
:
$ n which 6.14.3
/usr/local/n/versions/6.14.3/bin/node
Или запустите загруженную версию node
с помощью команды n run
:
n run 8.11.3 --debug some.js
Или выполните команду с измененным PATH
, чтобы node
и npm
были из загруженной версии Node.js. (Примечание: при таком запуске npm
будет использовать глобальные node_modules из папки версии целевого узла.)
n exec 10 my-script --fast test
n exec lts zsh
Установка Node.js обычно также включает npm
, npx
и corepack
, но вы можете сохранить текущие (особенно новые) версии, используя --preserve
:
$ npm install -g npm@latest
...
$ npm --version
6.13.7
# Node.js 8.17.0 includes (older) npm 6.13.4
$ n -p 8
installed : v8.17.0
$ npm --version
6.13.7
Вы можете сделать это значением по умолчанию, установив для переменной среды непустую строку. Существуют отдельные переменные среды для npm
и corepack
:
export N_PRESERVE_NPM=1
export N_PRESERVE_COREPACK=1
Вы можете явно получить желаемое поведение независимо от переменных среды:
n --preserve nightly
n --no-preserve latest
Справку по командной строке можно получить с помощью n --help
.
Список соответствующих удаленных версий, доступных для загрузки:
n ls-remote lts
n ls-remote latest
n lsr 10
n --all lsr
Список загруженных версий в кеше:
n ls
Загрузите версию в кэш:
n download 22
Используйте n
для доступа к кэшированным версиям (уже загруженным) без доступа в Интернет.
n --offline 12
Удалите версию кэша после установки с помощью --cleanup
. Это особенно полезно для однократной установки, например, в Docker-контейнере.
curl -fsSL https://raw.githubusercontent.com/tj/n/master/bin/n | bash -s install --cleanup lts
Обычно n run
, n exec
и n which
завершится ошибкой, если целевая версия еще не находится в кеше. Вы можете добавить --download
, чтобы использовать кеш, если он доступен, или загрузить, если необходимо:
n --download run 18.3 my-script.js
Отображение диагностики для устранения проблем:
n doctor
Если вы хотите использовать другое зеркало Node.js, имеющее тот же макет, что и https://nodejs.org/dist/ по умолчанию, вы можете определить N_NODE_MIRROR
.
Одним из примеров являются пользователи в Китае, которые могут определить:
export N_NODE_MIRROR=https://npmmirror.com/mirrors/node
Другим примером является проект неофициальных сборок Node.js, который содержит загрузки для некоторых платформ, которые официально не доступны, таких как Armv6l (Raspberry Pi) и 32-битная версия x86.
export N_NODE_MIRROR=https://unofficial-builds.nodejs.org/download/release
Возможно, вам придется указать архитектуру явно, если она не определяется автоматически n
, например, при использовании musl
libc
в Alpine:
export N_NODE_MIRROR=https://unofficial-builds.nodejs.org/download/release
apk add bash curl libstdc++
n --arch x64-musl install lts
Если пользовательское зеркало требует аутентификации, вы можете добавить в URL-адрес имя пользователя и пароль в кодировке URL-адреса. например
export N_NODE_MIRROR=https://encoded-username:encoded-password@host:port/path
Существует также N_NODE_DOWNLOAD_MIRROR
для другого зеркала с тем же макетом, что и у https://nodejs.org/download по умолчанию.
По умолчанию n
выбирает двоичные файлы, соответствующие архитектуре вашей системы. Например, в 64-битной системе n
будет загружать 64-битные двоичные файлы.
На Mac с Apple Silicon:
n
по умолчанию использует двоичные файлы Arm64, которые работают изначальноn
по умолчанию использует двоичные файлы x64, которые работают в Rosetta 2. Вы можете переопределить архитектуру по умолчанию, используя опцию -a
или --arch
.
например, переустановите последнюю версию Node.js с двоичными файлами x64:
n rm current
n --arch x64 current
Команда n
по умолчанию загружает и устанавливает папку /usr/local
, но вы можете переопределить это местоположение, указав N_PREFIX
. Чтобы изменить местоположение на $HOME/.n
, добавьте в файл инициализации оболочки такие строки:
export N_PREFIX=$HOME/.n
export PATH=$N_PREFIX/bin:$PATH
Если вы хотите хранить загрузки в другом месте, используйте N_CACHE_PREFIX
. Это не влияет на то, где установлена версия активного узла.
n
по умолчанию использует для загрузки архивы Node.js, сжатые xz, если вполне вероятно, что tar в системе поддерживает распаковку xz. Вы можете переопределить автоматический выбор, установив для переменной среды нулевое или ненулевое значение:
export N_USE_XZ=0 # to disable
export N_USE_XZ=1 # to enable
Вы можете явно получить желаемое поведение независимо от переменной среды:
n install --use-xz nightly
n install --no-use-xz latest
Вкратце:
N_NODE_MIRROR
: см. пользовательский источник.N_NODE_DOWNLOAD_MIRROR
: см. пользовательский источник.N_MAX_REMOTE_MATCHES
для изменения максимального количества совпадающих версий ls-remote
по умолчанию — 20.N_PRESERVE_NPM
: см. Сохранение npm.N_PRESERVE_COREPACK
: см. Сохранение npm. n
загружает готовый пакет Node.js и устанавливает его с одним префиксом (например, /usr/local
). Это перезапишет предыдущую версию. Папка bin
в этом месте должна находиться в вашем PATH
(например, /usr/local/bin
).
Загрузки сохраняются в папке кэша и могут использоваться для переустановки. Загрузки также доступны для ограниченного использования с использованием n which
и n run
и n exec
.
Глобальные пакеты npm
не изменяются при установке, за исключением самого npm
, который является частью установки Node.js.