Install Node.js to install n to install Node.js?
node.jsNpmNnode.js Problem Overview
I have a problem understanding the use of n. Basically, it is clear that it is a version manager for Node.js such as nvm.
But in contrast to nvm, which is basically a shell script, according to the documentation you are encouraged to use npm to install n:
$ npm install -g n
What I don't get is: For having npm
at hand you need to install Node.js. Why would I install Node.js manually to use npm
to then be able to install Node.js using n?
To put my question in other words: Why does n suggest installing using npm
, if its main purpose is to install Node.js, which includes npm?
node.js Solutions
Solution 1 - node.js
tl; dr
# Installs n and the latest LTS Node.js version to ~/n.
# For bash, ksh, zsh, modifies the respective user-specific shell-initialization file to
# define env. variable N_PREFIX and append $N_PREFIX/bin to the $PATH.
curl -L https://git.io/n-install | bash
I feel your pain. Installing Node.js to then install n
to then manage Node.js installations is indeed a strange setup.
It would indeed be great to be able to install n
by itself first.
I've created a project to support installation of n
directly from GitHub; the only prerequisite beyond what n
itself needs is git
.
Note that you must first remove any pre-existing n
/ Node.js versions.
The target directory, ~/n
by default, must either not yet exist or be empty.
For bash
, ksh
, and zsh
, the relevant shell initialization file (e.g., ~/.bashrc
) is automatically modified to define environment variable N_PREFIX
and append $N_PREFIX/bin
to the $PATH
; for other shells, this must be done manually.
Aside from installing n
directly from GitHub, it also installs helper scripts for updating n
(n-update
) and uninstalling it (n-uninstall
).
Here are working examples; see the n-install GitHub repo for details:
-
Installation with confirmation prompt to confirm installing to default location
$HOME/n
and installing the latest LTS Node.js version:curl -L https://git.io/n-install | bash
-
Automated installation to the default location, with subsequent installation of the latest LTS (long-term support) and latest-overall Node.js versions, as well as the latest 4.1.x Node.js version:
curl -L https://git.io/n-install | bash -s -- -y lts latest 4.1
-
Automated installation to the default location, without subsequent installation of a Node.js version:
curl -L https://git.io/n-install | bash -s -- -y -
-
Automated installation to custom location
~/util/n
, with subsequent installation of the latest LTS Node.js version:curl -L https://git.io/n-install | N_PREFIX=~/util/n bash -s -- -y
Solution 2 - node.js
If you prefer, you can install n from source:
cd /tmp
git clone --depth=1 https://github.com/tj/n
cd n
sudo make install
Then you can install the latest stable version of node as follows:
n stable
Solution 3 - node.js
The n module was created for convenience.
For example, if you wanted to update your version of Node.js from v0.8.0 to v0.10.20, would you rather download a package, extract and compile? Or would you rather type n 0.10.20
and have it instantly installed, while still retaining previous versions of Node for easy switching?
n suggests using npm to install it because n is a module. That is, npm is the easiest way to install it. Node modules have the functionality of being able to run in a shell when installed globally, so that function was utilized to make switching Node versions much easier.
Solution 4 - node.js
You can also install npm
separately from Node.JS; e.g.: on a system without Node.JS:
git clone https://github.com/npm/npm
cd npm
./configure
make
Reference: NPM GitHub project
Solution 5 - node.js
I had the same question, but have seen the light. 'n' is a handy tool and makes it simple to test different versions of node. Works great on Linux, but no matter how I try to install it on OS X (git clone, then npm install or using user456584's recommended method), when I run it, I always get the same results of "Error: no installed version", even though it installs into
> /usr/local/lib/node_modules/n
and
> /usr/local/bin/n
Frustrating because I've found this tool to be so handy on Linux.
Solution 6 - node.js
If you have included your default node bin in the $PATH variable like this
export PATH=/usr/local/Cellar/node/11.5.0/bin:$PATH
then n will not be able to active other node versions. Remove this export from the path and then you can manage the currently active node version by n.
Solution 7 - node.js
The README for n
now has a longer section covering different installation approaches.
Like nvm
, n
is a bash script. npm
is suggested as an easy way to install n
if you already have npm
, and then you can use n
to change the Node.js version. But there are plenty of other approaches for a first install of Node.js. In brief and in no particular order...
You can install n
using curl:
curl -L https://raw.githubusercontent.com/tj/n/master/bin/n -o n
Or clone the n
repo and install from there:
make install
Or use n-install:
curl -L https://git.io/n-install | bash
Or Homebrew:
brew install n
Or MacPorts:
port install n
(Disclaimer: I am the current maintainer of n
.)
Solution 8 - node.js
If you are using n then you should use below command
bash$ sudo n latest