.github | ||
bin | ||
docs | ||
test | ||
.editorconfig | ||
.gitignore | ||
.markdownlint.json | ||
CHANGELOG.md | ||
CONTRIBUTING.md | ||
LICENSE | ||
Makefile | ||
package-lock.json | ||
package.json | ||
README.md |
n
– Interactively Manage Your Node.js Versions
Node.js version management: no subshells, no profile setup, no convoluted API, just simple.
(Note: n
is not supported natively on Windows.)
Installation
Since you probably already have node
, the easiest way to install n
is through npm
:
npm install -g n
Alternatively, you can clone this repo and
make install
to install n
to bin/n
of the directory specified in the environment variable $PREFIX
, which defaults to /usr/local
(note that you will likely need to use sudo
). To install n
in a custom location (such as $CUSTOM_LOCATION/bin/n
), run PREFIX=$CUSTOM_LOCATION make install
.
Once installed, n
caches node
versions in subdirectory n/versions
of the directory specified in environment variable N_PREFIX
, which defaults to /usr/local
; and the active node
version is installed directly in N_PREFIX
.
To avoid requiring sudo
for n
and npm
global installs, it is suggested you either install to your home directory using N_PREFIX
, or take ownership of the system directories:
# make cache folder (if missing) and take ownership
sudo mkdir -p /usr/local/n
sudo chown -R $(whoami) /usr/local/n
# take ownership of node install destination folders
sudo chown -R $(whoami) /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share
Third Party Installers
On macOS with Homebrew you can install the n formula.
brew install n
On Linux and macOS, n-install allows installation directly from GitHub; for instance:
curl -L https://git.io/n-install | bash
n-install sets both PREFIX
and N_PREFIX
to $HOME/n
, installs n
to $HOME/n/bin
, modifies the initialization files of supported shells to export N_PREFIX
and add $HOME/n/bin
to the PATH
, and installs the latest LTS node
version.
As a result, both n
itself and all node
versions it manages are hosted inside a single, optionally configurable directory, which you can later remove with the included n-uninstall
script. n-update
updates n
itself to the latest version. See the n-install repo for more details.
Installing Node Versions
Simply execute n <version>
to download and install a version of node
. If <version>
has already been downloaded, n
will install from its cache.
n 10.16.0
n lts
Execute n
on its own to view your downloaded versions, and install the selected version.
$ 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, q to quit
(You can also use j
and k
to navigate up or down without using arrows.)
If the active node version does not change after install, try opening a new shell in case seeing a stale version.
Specifying Node Versions
There are a variety of ways of specifying the target node version for n
commands. Most commands use the latest matching version, and n ls-remote
lists multiple matching versions.
Numeric version numbers can be complete or incomplete, with an optional leading v
.
4.9.1
8
: 8.x.y versionsv6.1
: 6.1.x versions
There are labels for two especially useful versions:
lts
: newest Long Term Support official releaselatest
,current
: newest official release
There is support for release streams:
argon
,boron
,carbon
: codenames for LTS release streams
The last form is for specifying other releases available using the name of the remote download folder optionally followed by the complete or incomplete version.
chakracore-release/latest
nightly
test/v11.0.0-test20180528
rc/10
Removing Versions
Remove some cached versions:
n rm 0.9.4 v0.10.0
Removing all cached versions except the current version:
n prune
Remove the installed node and npm (does not affect the cached version). This can be useful to revert to the system version of node (if in a different location), or if you no longer wish to use node and npm, or are switching to a different way of managing them.
n uninstall
Using Downloaded Node Versions Without Reinstalling
There are three commands for working directly with your downloaded versions of node
, without reinstalling.
You can show the path to the downloaded version:
$ n which 6.14.3
/usr/local/n/versions/6.14.3/bin/node
Or run a downloaded node
version with the n run
command:
n run 8.11.3 --debug some.js
Or execute a command with PATH
modified so node
and npm
will be from the downloaded node
version.
(NB: this npm
will be working with a different and empty global node_modules directory, and you should not install global
modules this way.)
n exec 10 my-script --fast test
Miscellaneous
Command line help can be obtained from n --help
.
List matching remote versions available for download:
n ls-remote lts
n ls-remote latest
n lsr 10
n --all lsr
List downloaded versions in cache:
n ls
Display diagnostics to help resolve problems:
n doctor
Custom Source
If you would like to use a different node mirror which has the same layout as the default https://nodejs.org/dist/, you can define N_NODE_MIRROR
.
The most common example is users in China can define:
export N_NODE_MIRROR=https://npm.taobao.org/mirrors/node
There is also N_NODE_DOWNLOAD_MIRROR
for a different mirror with same layout as the default https://nodejs.org/download
Custom Architecture
By default n
picks the binaries matching your system architecture, e.g. n
will download 64 bit binaries for a 64 bit system. You can override this by using the -a
or --arch
option.
Download and use latest 32 bit version of node
:
n --arch x86 latest
Optional Environment Variables
The n
command downloads and installs to /usr/local
by default, but you may override this location by defining N_PREFIX
.
To change the location to say $HOME/.n
, add lines like the following to your shell initialization file:
export N_PREFIX=$HOME/.n
export PATH=$N_PREFIX/bin:$PATH
By default n
downloads archives from the mirror site which have been compressed with gzip
. You can switch to using the xz
compressed archives by defining N_USE_XZ
.
export N_USE_XZ=true
In brief:
N_NODE_MIRROR
: See Custom sourceN_NODE_DOWNLOAD_MIRROR
: See Custom source- support for NO_COLOR and CLICOLOR=0 for controlling use of ANSI color codes
N_MAX_REMOTE_MATCHES
to change the defaultls-remote
maximum of 20 matching versions