Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Use one of these techniques to install node and npm without having to sudo. Discussed in more detail at Note: npm >=0.3 is *safer* when using sudo.
echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
. ~/.bashrc
mkdir ~/local
mkdir ~/node-latest-install
cd ~/node-latest-install
curl | tar xz --strip-components=1
./configure --prefix=~/local
make install # ok, fine, this step probably takes more than 30 seconds...
curl | sh
# this way is best if you want to stay up to date
# or submit patches to node or npm
mkdir ~/local
echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
. ~/.bashrc
# could also fork, and then clone your own fork instead of the official one
git clone git://
cd node
./configure --prefix=~/local
make install
cd ..
git clone git://
cd npm
make install # or `make link` for bleeding edge
# take ownership of the folders that npm/node use
# please don't do this if you don't know what it does!
sudo mkdir -p /usr/local/{share/man,bin,lib/node,include/node}
sudo chown -R $USER /usr/local/{share/man,bin,lib/node,include/node}
# now just a pretty vanilla node install
# let it use the default paths, but don't use sudo, since there's no need
mkdir node-install
curl | tar -xzf - -C node-install
cd node-install/*
make install
# now the npm easy-install
curl | sh
# use nave, but without a subshell
# note that we're doing "usemain" instead of "use"
mkdir ~/.nave
cd ~/.nave
sudo ln -s $PWD/ /usr/local/bin/nave
# take ownership
# please don't do this if you don't know what it does!
sudo mkdir -p /usr/local/{share/man,bin,lib/node,include/node}
sudo chown -R $USER /usr/local/{share/man,bin,lib/node,include/node}
# install the latest stable nodejs in the "main" root.
nave usemain stable
curl | sh
# this way is really handy if you want to test things
# in different versions of node and use stable release
# versions of things.
# make a folder where you want to keep this stuff.
mkdir ~/.nave
cd ~/.nave
sudo ln -s $PWD/ /usr/local/bin/nave
# now you can forget about that folder.
# you never have to go back in there.
# to use a version of node in a virtual environment
nave use 0.4.8
# to install npm in that virtualenv
curl | sh
# do stuff...
npm install whatever etc
# return to non-nave-land
# use a different version of node..
nave use 0.4.6
# etc...
# using Homebrew
# Note: `brew install npm` has problems, as of 2010-12-30.
# hopefully it will eventually be good and happy.
# As of npm@0.2.13, however, this is an option
PREFIX=$(brew --prefix)
# take ownership
# this will also let homebrew work without using sudo
# please don't do this if you don't know what it does!
sudo mkdir -p $PREFIX/{share/man,bin,lib/node,include/node}
sudo chown -R $USER $PREFIX/{share/man,bin,lib/node,include/node}
brew install node
# now install npm
# prefix will default to $(brew --prefix)
curl | sh
echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc
echo 'export npm_config_userconfig=$HOME/.config/npmrc' >> ~/.bashrc
. ~/.bashrc
mkdir ~/.local
mkdir ~/node-latest-install
cd ~/node-latest-install
curl | tar xz --strip-components=1
./configure --prefix=~/.local
make install
curl | sh
# install node wherever.
# use sudo even, it doesn't matter
# we're telling npm to install in a different place.
echo prefix = ~/local >> ~/.npmrc
curl | sh

DTrejo commented Oct 3, 2010

Used the top one, and it worked great. Thanks :)

For me the 2nd one worked ^^ thx

joar commented Nov 12, 2010

First one worked perfectly, although on a Debian x64 512M RAM it did not perform in 30 seconds.

'install' finished successfully (3m23.933s)

HAH! NEVERMIND! Didn't work, > node works, > npm does not. I had created the ~/npm before i ran the script. I'll retry.

Edit: I retried after I cleaned up some node-related directories, binaries and installs. I uninstalled nodejs, the Aptitude(package manager) version of node from my machine and removed all node-related directories in ~.

The self-compiled node version created with the first script works perfectly :)

First option worked well for me once I realize that the path of node is important. I.E. I had node previously installed to usr/local not my ~/local. I pushed my ~/local to have higher precedence in the path and the npm installation worked without a hitch.

Addendum: As I had 'system' node and a local node installed, when I borked up my paths and the system node was running, all my paths were screwed when doing requires in my code, forcing the local 'node' to be my executable fixed all my path issues.

Ex: 'which node' returns a path to my ~/jbateman/local installation instead of /usr/local/bin

seems like someone is keeping ports up to date as well...

For the take-ownership script, you first need to create /usr/local/lib/node and /usr/local/include/node.

sudo mkdir -p /usr/local/{lib/node,include/node}

isaacs commented Dec 27, 2010

Thanks, Robert, good catch. Fixed.

ramwisc commented Jan 4, 2011

The 2nd script ( has a wrong URL for cloning node. It should read:

git clone

instead of

git clone git://

ramwisc commented Jan 4, 2011

chadams commented Jan 7, 2011

If your on a MAC remember your ".bashrc" isn't used, it should be ".bash_profile"

maxidr commented Jan 29, 2011

Thanks for share!! good work!

rbotman commented Mar 11, 2011

For the only-git-all-the-way script, the location of node.git should be updated:


isaacs commented Mar 11, 2011

@rbotman: Thanks.

There's a reference to node-v0.2.5.tar.gz that should be replaced with node-latest.tar.gz.

d2s commented Mar 26, 2011

There is one quite nasty error in example:

There should be
cd ~/local
before first git clone command so that things would end up to ~/local/node/ instead of ~/node/

DTrejo commented Mar 26, 2011


Just a note: make install does not work without sudo.

Help !!
whenever the command
curl | sh
is run on my computer I just end up with a gzip process that runs forever
and advice because i'm really struggling

Also if I try the git all the way i get this
node cli.js install -g
npm ERR! Could not read data for npm@1.0.0rc8
npm ERR! error installing npm@1.0.0rc8 Error: ECONNREFUSED, Could not contact DN
S servers
npm ERR! error installing npm@1.0.0rc8 at IOWatcher.callback (dns.js:53:15)
npm ERR! Error: ECONNREFUSED, Could not contact DNS servers
npm ERR! at IOWatcher.callback (dns.js:53:15)
npm ERR! Report this entire log at:
npm ERR!
npm ERR! or email it to:
npm ERR!
npm ERR!
npm ERR! System CYGWIN_NT-5.1 1.7.8(0.236/5/3)
npm ERR! command "node" "/home/NJH/node-latest-install/npm/cli.js" "install" "-g
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /home/NJH/node-latest-install/npm/npm-debug.log
npm not ok


isaacs commented Mar 28, 2011

devlim commented Apr 14, 2011

May i know how to upgrade node.js? just run the same command again?

DTrejo commented Apr 14, 2011

Hey devlim, try running one of these again, it should work (if you can remember, try to use the same one as last time, but either way it should work fine).

devlim commented Apr 14, 2011

Thank DTrejo.

What is the rationale for installing to ~/local in so many of these?

joar commented Apr 25, 2011

I think it is to separate node and the node related tools from the rest of the system. This is preferrable since NodeJS is in rapid development and is rarely or never available from the package manager in it's latest version.

Since it is separated from the global program installation folders, it's not as easily lost and forgotten, not so much for disk space, perhaps, but more for the principle.


isaacs commented Apr 26, 2011

vkelman commented May 3, 2011

I'm getting the same error as edlongman trying to run curl | sh (Cygwin)

Hey guys make sure that the last line of code in your bashrc file is not a comment as the appending will lead you to a commented out PATH=$HOME/local/bin:$PATH which means the install will fail.

I updated the code at a fork of the gist here:

If there is a way of doing a pull request for a gist I can't seem to find it.

When I did the install as superuser (take-ownership) route I got an error:
Could not install the file '/usr/local/lib/pkgconfig/nodejs.pc'

anyone have any ideas?

In referance to the second method "". I ran into a problem with installing npm. The way that I resolved the issue was to once my .bashrc file was updated (line 5), I added source ~/.bashrc to the script. This put node in the path and installing npm worked just fine.

mccoy commented May 7, 2011

@jtmkrueger: the pkgconfig command is used by various build utilities to determine what you have installed on a system without needing to dig through output from various platform-specific package managers (e.g. build sequence needs to know where you have installed lua, so it looks for /usr/lib/pkgconfig/lua.pc, /usr/local/lib/pkgconfig/lua.pc, etc until it finds one and in that file there is a listing of where the various lib and bin dirs are for that package.) If this is the first major package you have installed in /usr/local then it is possible that the pkgconfig directory does not exist. Try running (as root/sudo) "mkdir /usr/local/lib/pkgconfig" and then install again.

Please fix as per the above comment.

First one worked! Woot! This should be the default. I had problems with it the first two times I tried.

rumkin commented Jul 4, 2011

Hi i've got such problem with npm on ubuntu 11.04:
packages and npm automatically installed in folder /proc/7278/cwd/...
And then node.js can't load any installed module. I used this bash script:

mkdir ~/local
echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
. ~/.bashrc

# could also fork, and then clone your own fork instead of the official one

git clone git://
cd node
./configure --prefix=~/local --without-ssl
make install
cd ..

git clone git://
cd npm
make install

Maybe anyone could help me: what if i want to install node.js to /media/lazersluts/nodejs, what should i do.
And wich files i should to remove excepts ~/local and ~/.bashrc to completely remove node.js. If i want to make fresh installation.
Thanks. And sorry for noobies and "excellent English" )


Solved with

echo prefix = ~/local >> ~/.npmrc
curl | sh

rumkin commented Jul 4, 2011

Why does


work only on partition where node.js installed? And doesn't on other partitions?

pcambra commented Aug 6, 2011

I had to do sudo make install in the first solution.

Also I had problems with npm:

In Ubuntu, you may need to do sudo apt-get install libssl-dev before you can compile Node.

Ginny commented Aug 30, 2011

'install' finished successfully (12m33.358s)

triptych commented Sep 5, 2011

None of these worked for me as node gave me an out of memory error trying to run the node cli.js command. I was eventually able to get it working by loading the .pkg file here


isaacs commented Sep 5, 2011

Thankyou, my node/npm install got corrupted "somehow" , the first method about worked for me

I tried the first one using cygwin and I'm stuck with this:

curl | sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 7156 100 7156 0 0 14785 0 --:--:-- --:--:-- --:--:-- 25466
tar (GNU tar) 1.25
Packaged by Cygwin (1.25-1)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.
Installing without make. This may fail.
Failed to get tarball url for npm/latest

If I try the second, and run make install it seems to run forever at

I had to add:

chmod 755

before line 10 in order for to work properly. Did I miss something?

I am trying to install this using homebrew and I seeing the following permissions error.

Could not create /usr/local/lib/node_modules/___npm.npm
npm ERR! error installing npm@1.0.106 Error: EACCES, permission denied '/usr/local/lib/node_modules'
npm ERR! Error: EACCES, permission denied '/usr/local/lib/node_modules'

It looks like the install for npm is failing:
curl | sh

To get this working I added

chown -R YOUR_USER_NAME:admin local/include/
chown -R YOUR_USER_NAME:admin local/lib/

I probably could also have run it the install command with sudo like this:

sudo curl | sh

but the point of this gist is to install node and npm without having to sudo. However, at the end of the title at the top of this gist it says that npm >=0.3 is safer when using sudo. I am not sure if that means that you should install using sudo or chown the directory to $USER

which node.js version is the latest who support i386 MacOSX 10.5.8 ?
i tryed all versions, looks like its not documented about... just node-v0.4.9 was working at last.. all other had :bad error: bad cpu errors and so on, any install failed later or earlyer.. if someone calls a file mac-install package or means it is for a mac, then it has in my opinion to be for macs and not just for lion. because then it is just a lion install ^^
otherwise i'm the terminalator with my pocketcalculator! :-P
can anyone help out, with a precompiled package for osx10.5.8, or can send me 1000 dollar :D

top one worked great for me on Ubuntu Server 11.04. thanks!

boxxxie commented Mar 10, 2012

how do i update node.js?

i tried the first 2 methods and got the same error

src/unix/ev/ev.c: In function ‘ev_io_start’:
src/unix/ev/ev.c:2673: error: ‘EV_LIBUV_KQUEUE_HACK’ undeclared (first use in this function)
src/unix/ev/ev.c:2673: error: (Each undeclared identifier is reported only once
src/unix/ev/ev.c:2673: error: for each function it appears in.)
make[1]: *** [src/unix/ev/ev.o] Error 1
make[1]: Leaving directory /home/paul/node-latest-install/out/Release/deps/uv' Waf: Leaving directory/home/paul/node-latest-install/out'
Build failed: -> task failed (err #2):
{task: uv uv.h -> uv.a}
make: *** [install] Error 1

In, there is no need to git clone the npm repo, as it is now made available when you install node itself. So can remove line numbers 15-18.

Also, this is how the node installation ended for me:

shebang #!~/local/bin/node /local/lib/node_modules/npm/bin/npm-cli.js
return, stringToFlags(flags), mode);
Error: ENOENT, no such file or directory '
at Object.openSync (fs.js:280:18)
at Object.readFileSync (fs.js:155:15)
at shebang (/home/proto/repos/node/tools/installer.js:53:20)
at run (/home/proto/repos/node/tools/installer.js:77:10)
at /home/proto/repos/node/tools/installer.js:85:7
at ChildProcess.exithandler (child_process.js:533:7)
at ChildProcess.emit (events.js:90:17)
at maybeClose (child_process.js:615:16)
at Process.onexit (child_process.js:655:5)
make: *** [install] Error 1

Though everything seems to be working ("node -v", "npm -v" returns proper values, and "npm install -g coffee-script" works), not sure why the above error happened, and what the implications are. Jotting it down here since someone else too might face the issue.

Just a note, you can't use the ~ for the reference to home and currently npm doesn't work with 0.9.0-pre so the git method fails

Running Ubuntu 12.04, I kept running into this error when running make install

/home/tim/node-latest-install/out/Release/ ../deps/v8/src/
make[1]: g++: Command not found

My vm was brand spanking new, so I had to install this before make install would work

sudo apt-get install build-essential libssl-dev curl git-core

Just used the first one at Amazon EC2, awesome, thanks.

I don't know why installing npmjs didn't work using the first method but this is what I'm getting.
help would be appreciated.
npm ERR! Error: EACCES, unlink '/home/enduser/local/bin/npm'
npm ERR! { [Error: EACCES, unlink '/home/enduser/local/bin/npm'] errno: 3, code: 'EACCES', path: '/home/enduser/local/bin/npm' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Linux 3.5.0-27-generic
npm ERR! command "/home/enduser/local/bin/node" "/tmp/npm.14923/package/cli.js" "rm" "npm" "-gf"
npm ERR! cwd /tmp/npm.14923/package
npm ERR! node -v v0.10.5
npm ERR! npm -v 1.2.18
npm ERR! path /home/enduser/local/bin/npm
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, unlink '/home/enduser/local/bin/npm'
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /tmp/npm.14923/package/npm-debug.log
npm ERR! not ok code 0

npm@1.2.18 prepublish .
node bin/npm-cli.js prune ; rm -rf test///node_modules ; make -j4 doc

make: Nothing to be done for `doc'.
npm ERR! error rolling back Error: EACCES, unlink '/home/enduser/local/bin/npm'
npm ERR! error rolling back npm@1.2.18 { [Error: EACCES, unlink '/home/enduser/local/bin/npm'] errno: 3, code: 'EACCES', path: '/home/enduser/local/bin/npm' }
npm ERR! Error: EACCES, unlink '/home/enduser/local/bin/npm'
npm ERR! { [Error: EACCES, unlink '/home/enduser/local/bin/npm'] errno: 3, code: 'EACCES', path: '/home/enduser/local/bin/npm' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Linux 3.5.0-27-generic
npm ERR! command "/home/enduser/local/bin/node" "/tmp/npm.14923/package/cli.js" "install" "-gf"
npm ERR! cwd /tmp/npm.14923/package
npm ERR! node -v v0.10.5
npm ERR! npm -v 1.2.18
npm ERR! path /home/enduser/local/bin/npm
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, unlink '/home/enduser/local/bin/npm'
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /tmp/npm.14923/package/npm-debug.log
npm ERR! not ok code 0
It failed

apparently you still need admin rights to install npm. I just had the same issue, so I manually downloaded the install script and "sudoed" it:

cd ~
chmod +x
sudo ./

No error messages so apparently it worked :)

This helped me out... and in my case, (CentOS 6.3) EPEL repo has this jewel of a software, so it is a reliable package maintainer... This was really easy.

I am getting this error in both method 1 and 2. Can someone please help?

root@web [/node]# ./configure --prefix=~/local
File "./configure", line 427
arm_float_abi = 'hard' if is_arm_hard_float_abi() else 'default'
SyntaxError: invalid syntax

I got an error at the same step as above except a different line:

bash-3.2$ ./configure --prefix=~/local
File "./configure", line 441
fpu = 'vfpv3' if armv7 else 'vfpv2'
SyntaxError: invalid syntax


ghost commented Jun 27, 2013

Worked here. Ubuntu 13.04 64 bits. Thanks :)

symsun commented Jun 28, 2013

First one is not working for me also. Someone pls help.

[root@sddev node-latest-install]# ./configure --prefix=~/local
File "./configure", line 441
fpu = 'vfpv3' if armv7 else 'vfpv2'
SyntaxError: invalid syntax

zweiland commented Jul 2, 2013

top worked beautifully! thanks man!

Jerbot commented Jul 5, 2013

Step 9, method 1:

"npm cannot be installed without nodejs.
Install node first, and then try again.

"Maybe node is installed, but not in the PATH?
Note that running as sudo can change envs."

zarac commented Aug 6, 2013

The configure script for is in python2 - this will cause parse errors if python3 is the default on your system. One solution is to add a symbolic link to python2 inside your ~/local/bin.

cd ~/local/bin
ln -s /usr/bin/python2 ./python

I thought "PROFESSIONALS" developed node.js?????

It is a garbage install process for the mac. The install directory is hidden/protected: /usr/local/bin...


It is hard to have ANY confidence in developers that can NOT even get an installer right.

Can you imagine if surgeons and real professionals did their work so poorly? I am obviously very pissed that I just wasted two hours on what should be simple.

@itcastro maybe you should do something else if you failed to open and download installer in the first place.

leto commented Aug 29, 2013

./configure --prefix=/local does not work on my system, it creates a directory called "". The more defensive way is to do:

./configure --prefix=$HOME/local

modi2020 commented Sep 6, 2013

I love like charm
keep up the good work

Thank you so much!

kereg commented Oct 2, 2013

Your awesome script worked like a charm on my fedora 17.

No 30 seconds here....

Hi all - I'm pretty new to this but I read (and confirmed that it works for me) that using make -j (so with the -j flag) uses all processor cores and in my case (8 cores) makes it go A LOT faster.

On "take-ownership", the directory structure for the node dist is wrong.

curl | tar -xzf - -C node-install

should be

curl | tar -xzf - -C node-install ftw \m/
worked flawlessly . Love it

thank you so much!

@leto, ./configure --prefix=$home/local fixed the issues I was having with #2. Thanks!

The first one doesn't work on OSX 10.9.
curl: (60) SSL certificate problem: Invalid certificate chain
on the last step.

Actually, the problems with #2 are fixed with ./configure --prefix=$HOME/local. The home variable is capitalized.

Thank you very much..I have installed node in ubuntu.
Just one suggestion, the latest version of node has included npm, so the last line of code can be removed...^_^

I'm also getting this with the 30 second method.

"npm cannot be installed without nodejs.
Install node first, and then try again.

Maybe node is installed, but not in the PATH?
Note that running as sudo can change envs."

I'm pretty sure node installed although i do not seem to be able to run it. do i just delete /node-latest-install if i would want to try another method?


ghost commented Nov 17, 2013

@johan010 npm comes packaged with nodejs now so you can ignore the part about installing npm

i used nvm which gives you the added bonus of easy node.js-version switching:

# see more about nvm:
# added bonus: gives you the opportunity to switch node versions
# install nvm
curl | sh
# reload bash_profile
source ~/.bash_profile
# install a node.js version, edit the version you want to use
nvm install v0.10.22

Wow - wish i'd found this page like a year ago. :) stackoverflow answer is crap.

meeb0 commented Dec 5, 2013


This is beautiful.

In addition to the first script, I run this on new systems for easy sudo'ing, when (rarely) needed:

ln -s $HOME/local/bin/node /usr/bin/node
ln -s $HOME/local/lib/node /usr/lib/node
ln -s $HOME/local/bin/npm /usr/bin/npm
ln -s $HOME/local/bin/node-waf /usr/bin/node-waf

patorjk commented Feb 12, 2014

Just as a heads up, for the "" gist I had to add www to the npmjs URL since it was returning HTML. Ex:

$ curl --proxy [proxy here]
< html>Moved: < a href="">< /a>
< html>

aebm commented Feb 17, 2014

Hi Isaac,

I have updated the 30 seconds install to the new npm url. Here is the link to the gist


Can someone explain what each step in "" does? I'd like to know the reasons behind each line.

ict4eo commented Feb 26, 2014

Hi Isaac

I am trying to use the npm install procedure "" (actually part of a Dockerfile I am creating to install cartoDB).

The final output is this:

creating ./config.gypi
creating ./
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
03 0:00:03 --:--:-- 80
sh: 1: cannot open html: No such file
sh: 2: Syntax error: redirection unexpected

Do you have any idea what can cause this?

ict4eo commented Feb 27, 2014

Hi Isaac

When I try the second script (again, inside Docker), it also fails with this message:

Cloning into 'npm'...
rm -rf
scripts/ doc/api/ man/man3/npm-test.3
make[1]: Entering directory '/npm'
node cli.js install ronn --no-global
bash: node: command not found
make[1]: Leaving directory '/npm'
make[1]: *** [node_modules/.bin/ronn] Error 127
*** [man/man3/npm-test.3] Error 2

hi Isaac/guys couldn't execute the 30-secs-way without errors. Even I tried to fix it with no luck by playing around with most of the aforementioned variants. So just went to and click install. It downloads the latest node dist.

Then, I followed the readme instructions and got node installed (it seems that it comes with npm now)

My question is, am I missing something installing node+npm in this way?


kurotek commented Mar 3, 2014

Just a note, right now is throwing 301 redirects when you try and access without prefixing the www subdomain


curl -v

The solution is to either manually change for the redirect

curl -v

Or just use the -L option to tell curl to follow redirects

curl -Lv

After making one of those changes, the gists should work.


isaacs commented Mar 11, 2014

Just updated the scripts to add the www to the urls. Sorry about that, folks.

landed1 commented Mar 12, 2014

For some reason after maybe a restart yo command not found and also the same for npm. This was bugging me as it was happening after time periods...thought it must be a restart...

and running . ~/.bashrc solved my issue ! So how do I persist this ? In this file I have

export PATH=$HOME/local/bin:$PATH
export PATH=$HOME/local/lib/:$PATH

I thought those 2 lines would export the lines in the main paths file ?

So I guess I might need these added to my main etc/paths file right (but why didnt the exports work???)

[paths file]

can I add it like



sungwon commented Mar 25, 2014

ict4eo, I was getting the same error on my ubuntu system for the 2nd script and realized that it was compiling into the wrong directory (it actually made a directory named "~" in the current directory rather than using the home directory).

I changed:
./configure --prefix=~/local
by replacing the ~ with the full path to my home directory (e.g. '/home/username/local' where username is your username).

But I would grateful if someone could explain why the tilde did not work.

The homebrew install should be brew install node --without-npm or brew will install npm by default
I didn't read the whole comments so if this is a repeat, my apologise

mrzool commented Apr 7, 2014

@sungwon same thing here. running that second script threw me into a world of pain. took me 1 hour to figure out what the problem was.

First method worked, even thought it took a lot more than 30 seconds. Thanks.
Had to remove all the files and folder associated with the previous node install for it to work.

hektech commented Apr 24, 2014

First method helped me move forward with node. Thanks! One note: npm is included with the node install, so I skipped the last step and works fine (use "npm -v" to see which version you have).

I installed nave like but have issues here:

$ nave
zsh: permission denied: nave

Permission denied? Huh. It has all the correct permissions in /usr/local/bin:

lrwxrwxrwx  1 root root   37 May  7 12:56 nave -> /home/michael.heuberger/.nave/

but I can run nave with bash nave. When I try to install a node version, it gets installed but it won't find the node command afterwards.

I'm using Ubuntu 14.04 and ZSH here. Any clues?

Couldn't install properly with BREW for some reason. Used the top .sh and it was flawless. Thanks for the scripts!

Note for anyone having trouble with installing/using node and or npm (especially after restarting the terminal) - For me the PATH for node needed to be
echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bash_profile
. ~/.bash_profile
If your bash_profile does not read bashrc, then using bash_profile instead of bashrc in setting the path will fix the problem for you.

twlkyao commented Jun 7, 2014

I use the second, and it works.

renoth commented Jun 10, 2014

the last one ... piping curl into your shell ... this is clearly a joke isnt it?

Should I go with this one or noob-node-package-installer? :D

30-second one worked for me. Can't believe this post is over 4-years old and still timely.

Regarding approach. Please, do the following:

  • replace with to install the latest version of node.js (I had a build error because of missing SSLv2_method, Elementary OS Luna);
  • add sudo sh to the npm installation: curl | sudo sh (I had EACCESS error).


petterg commented Jun 29, 2014

On my gentoo system I get:

export PYTHON=/usr/bin/python2.7
$PYTHON ./configure --prefix=$HOME/js/js-libraries/node

../../src/weak_collection.js ../../src/promise.js ../../src/object-observe.js ../../src/
Traceback (most recent call last):
File "../../tools/", line 514, in
File "../../tools/", line 510, in main
JS2C(args[3:], args[0], args[1], args[2], options.raw, options.omit)
File "../../tools/", line 481, in JS2C
sources = PrepareSources(source)
File "../../tools/", line 372, in PrepareSources
assert len(macro_files) in [0, 1]
TypeError: object of type 'filter' has no len()

It seems like something does not honor the $PYTHON setting and is just calling "python" which gives python3 and the above error

rannday commented Jul 11, 2014

I thought the first one might work, but it didn't. But I also forgot to install build-essentials. Either way, I went with the way I usually use, which is:

mkdir ~/local
cd ~/Downloads

tar -zxvf node*
cd node*
./configure --prefix=/home/rann/local
make install
echo 'export PATH=/home/rann/opt/bin:${PATH}' >> ~/.bashrc
. ~/.bashrc
node -v
npm -v

For the record, I was having problems with the npm easy-install process. Just changed it to exec the script with sudo after its download and got it to work:

curl | sudo sh

First one gave me these errors:

npm ERR! Error: EACCES, mkdir '/usr/local/share/man/man1'
npm ERR! at Error (native)
npm ERR! { [Error: EACCES, mkdir '/usr/local/share/man/man1']
npm ERR! stack: 'Error: EACCES, mkdir '/usr/local/share/man/man1'\n at Error (native)',
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! path: '/usr/local/share/man/man1' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Linux 3.13.0-24-generic
npm ERR! command "/home/j00lz/.nvm/v0.11.13/bin/node" "/tmp/npm.9758/package/cli.js" "install" "-gf"
npm ERR! cwd /tmp/npm.9758/package
npm ERR! node -v v0.11.13
npm ERR! npm -v 1.4.20
npm ERR! path /usr/local/share/man/man1
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! stack Error: EACCES, mkdir '/usr/local/share/man/man1'
npm ERR! stack at Error (native)
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /tmp/npm.9758/package/npm-debug.log
npm ERR! not ok code 0

Git, path problem.

echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc

Following the instructions it's actually installed to $HOME/local/node.

I would add a note about python version early on. It it would be accepted, I would write a PR to add portability. At the very least, make some noise about using py2 and crashing-out explicitly

holodny commented Jul 28, 2014

Thanks Isaac! This is the gift that keeps on giving (for four years now, apparently). I just ran the top scripts on Ubuntu (Lubuntu) 14.04 Trusty and it ran perfectly and quickly, I just had to install Curl before step #6.

Neatest method I've found:

$ mkdir ~/.nave && cd $_ && wget
$ sudo ln -s $PWD/ /usr/local/bin/nave
$ chmod +x nave
$ nave use 0.10.30  # Or whatever other version you want
$ npm update -g npm

Hey man, thanks!! The first one worked for me!
Really, thanks, i have been suffering with permission errors 48 hours ago and now every thinks works fine!

ptica commented Aug 15, 2014


curl | sh

resulted in

curl: (51) SSL: certificate subject name '' does not match target host name ''

seems that npm is part of node so is there still need for it? as even without it I got:

which npm

Tried the first method and it failed reporting syntax errors in ./configure

@harleyhar you are probably using wrong python to install. instead of py3k try:

python2.7 configure --prefix=~/local

for me, that fixed the issue you seemed to be having

I installed with success:

BENs-MacBook-Air:~ benodonohue$ ls
Applications Dropbox Pictures
Desktop Library Public
Documents Movies local
Downloads Music node-latest-install

I get this when i run npm -v:
BENs-MacBook-Air:~ benodonohue$ npm -v
-bash: npm: command not found

Is someone able to tell me what i may have done or doing wrong?

I used twincharged solution shown above, now its working. I ran,
echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bash_profile


I made a slight revision to this here for homebrew:

# using Homebrew

# Note: `brew install npm` has problems, as of 2010-12-30.
# hopefully it will eventually be good and happy.
# As of npm@0.2.13, however, this is an option

PREFIX=$(brew --prefix)

# take ownership
# this will also let homebrew work without using sudo
# please don't do this if you don't know what it does!
sudo mkdir -p $PREFIX/{share/man,bin,lib/node,include/node}
sudo chown -R $USER $PREFIX/{share/man,bin,lib/node,lib/node_modules,include/node}

brew install node

# now install npm
# prefix will default to $(brew --prefix)
curl | sh

djavaui commented Nov 17, 2014


Wail75 commented Dec 8, 2014


I tried to install Semantic UI using the git only method. I went through the installation and after "npm install" ( ) I got an error about gulp version. Then I tried to update gulp with npm and got an error message saying that node version is not correct (sorry I lost the messages and I don't remember version numbers).
I checked my node version, it was something like "v0.10.33-pre". The version number was high enough but I guess the "pre" was confusing the version checking.
So I installed again node, but this time downloading it directly, getting version "v0.10.33", then everything worked correctly.

I tried the second one, and it ended up creating a literal "" directory within the node directory, so that it ended up installing to a directory named "/node/~/local". Is that just super bizarre or what? I'm on the current version as of today, so I guess v0.10.33.

Changing to --prefix=/home/username/local seems to fix it. But that's weird...

I received an error today installing '' in my Vagrant provision with the npm part which was not happening last week. Using 'curl -L | sh' instead (as suggested on resolved my problem. Cheers~

tl;dr - any reason not to just grab the binary?


I had the same problem and solution as cristovaov

Had the same problem as cristovaov - curl -L | sh (added -L to follow redirect) worked.


ghost commented Dec 26, 2014

@isaacs, all of the scripts should have replaced by because you changed the website address. Also, the description should be updated - with being replaced by which has also changed. Otherwise, these are great little scripts, and really easy to customise. Thanks a lot!

this should be default node install directory. I'm tired of sudo caused errors.

  1. uninstall old nodejs sudo apt-get remove nodejs
  2. install with
    • change last line as @cristovaov suggested curl -L | sh
  3. .npm dir stays the same so I didn't lose any of my plugins

Thanks for the gists, I've used the '' plenty of times with success. I do agree with easingthemes and Aedx that @isaacs should update the code with the up-to-date curl.

For what it's worth, if you are on a completely fresh install of ElementaryOS you might need to install g++ make first. I could get any of @isaacs scripts to work when I first tried (a while back) and had to do:

sudo apt-get install -y python-software-properties python g++ make

After that, the 30 second method worked smoothly (when remembering curl -L | sh)

Thanks, this is great. Great success with ''.

FWIW, curl says it's permanently moved to Yeah, adding -L to make curl follow redirects works, but it seems more straightforward to replace .org with .com.

ezmiller commented Jan 9, 2015

using these methods, how does one then update node? i tried to install n using npm and it didn't seem to work. when i issued the command n stable, and then node -v the version remained unchanged....

Thanks. I ran into some problems using sudo to install node and find here some good options to do it without sudo nor need to change /usr/local permissions.

But, I was wondering why the command "curl | sh" is needed. I chose the "" option and put line by line in terminal. But, after the "make install" command I tested if node was ok and it worked like a charm, then, by curiosity, I tested if npm was already installed together, because npm now come with node installer, and yes, npm was installed and fully functional.

So, the question is: Why run the "curl | sh" command is required?

p.s.: Sorry about my english, I am a huehuebr...

This should be changed:
to this:

$ curl | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0    51    0    51    0     0    350      0 --:--:-- --:--:-- --:--:-- 51000
sh: line 1: Moved: command not found

I used and it almost worked. I think the there is an error with the ./configure step. Specifically, the use of ~ for the user's home directory didn't seem to work correctly (I'm running mint 17, 64 bit)--it actually caused the creation of directory named ~ in the node directory.

I replaced this with an explicit path and it seemed to work. Specifically, I did this:

git clone git://
cd node
./configure --prefix=/home/myusername/local
make install

Much to my great frustration, nowhere, could I really find a complete and concise method of installing the full node stack that did not involve using sudo or some drawn out tedious, solution (and neither the official node site or stackexchange helped here)....

As well, all of the sites I visited said that npm was included with the nodejs module yet the nodejs version existing in the default Ubuntu repository did not seem to have it.
I came across the nvm module that sounded interesting as it gives you the ability to easily install and switch node.js versions (among other features).

To save others similar frustrations, I thought I would sketch out the steps I took to install the nodejs stack onto Ubuntu 12.04, "Precise" (elementary):

Also, since nvm uses the name "node" instead of "nodejs", make sure that the unrelated program also named "node" -- the Amateur Packet Radio -- does not already exist on your system.

sudo apt-get install git build-essential libssl-dev curl git-core

wget -qO- | bash

(I determined the latest nvm version available -- and a lot of other, really helpful information -- at:

To have nvm automatically sourced, accessible at login:

vi ~/.bashrc
And add this to the end:
source ~/.nvm/

Now, as root (of course):
vi /etc/bash.bashrc
And add this to the end:
(close your terminal sessions and log back in - not as root)

nvm install stable
nvm use stable

To set a default version to be used in any new shell, use the alias 'default':
nvm alias default stable

Notice that nvm installs everything to the ~/.nvm directory (circumventing the usual requirement and inherent danger of requiring sudo to be used for installing nodejs and its scripts):

And if you want Ionic to be installed as well, as I did:
npm install ionic -g

Debian Sid user here, used the first script with two changes

./configure --prefix=~/local


./configure --prefix=$HOME/local

as well as added -L to

curl -L | sh

@deesejohn Thank you very much!

I need to install the respensive theme edx-platform, but when I execute the commands :

npm install
bower install

gave me these errors:

npm ERR! install Couldn't read dependencies
npm ERR! package.json ENOENT, open '/package.json'
npm ERR! package.json This is most likely not a problem with npm itself.
npm ERR! package.json npm can't find a package.json file in your current directory.

npm ERR! System Linux 3.2.0-68-virtual
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install"
npm ERR! cwd /
npm ERR! node -v v0.10.32
npm ERR! npm -v 1.4.28
npm ERR! path /package.json
npm ERR! errno 34
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /npm-debug.log
npm ERR! not ok code 0

Linux Mint 17 here. The first method almost worked as-is for me except the path added to .bashrc in line#1 wasn't quite right so when attempting to start node at the CLI I was getting the following message echoed back:

The program 'node' can be found in the following packages:
 * node
 * nodejs-legacy
Try: sudo apt-get install <selected package>

So in my home directory I edited .bashrc:

nano .bashrc

..and changed the line that contained:
export PATH=$HOME/local/bin:$PATH
export PATH=$HOME/node-latest-install:$PATH

After that I was able to node --version and see that v0.12.0 was built and working

Top one worked wonders for me.
Thanks so much.

Simplest way:
Download and extract it some where. then add some where/bin to path. You can download other binary from here:

echo prefix = ~/local >> ~/.npmrc

Thank you for this, the top one worked for me!

oh, by the way, for #1, the curl url is wrong, instead use: curl | bash

forgive my ignorance, but i don't understand how to use this, can help ?(: my OS is Fedora 21(:

Having spent 2 hours trying to get node/npm working properly in elm OS, I found this, used the top one.. everything working perfectly now. Thank you very very much!

Having trouble getting the first option to work. Maybe it would help if there were some explanation about what these commands do?

what does the second line . ~/.bashrc do?
what does ./configure --prefix=~/local do?

My guess is that these are trying to install into ~/local and that's why you place that in the path. If so, that did not work for me. I had to put export PATH=$HOME/node-latest-install:$PATH into my .bash_profile to get my system to recognize node. But now I cannot run npm from anywhere.

As Jakobud says, the install url for npm has moved permanently from to

I tried the first method and kept getting stuck. Then yesterday I tried the second method (git-all-the-way) and it managed to work with a few modifications. Made a gist if anybody else wants to see:

stanusk commented Apr 8, 2015

The first version did not work until I read post by gitjeff05 and added:
echo 'export PATH=$HOME/node-latest-install:$PATH' >> ~/.bashrc
Being completely new to this, it took a couple of minutes for me to realize, that it would be recognized only after bash restart..

As for the npm, this worked:
curl -L | sh

Just needed to compile node, so the first option worked easy enough. Thank you!

@leto Using ./configure --prefix=$HOME/local per your suggestion helped OOTB Ubuntu 14.04 with method #1.

jvkumar commented Apr 22, 2015

@isaacs , i could not get very first solution work. And it ran over a minute and did bunch of stuff. Can you tell me how to clean and undo whatever this would have done?

schoetbi commented May 4, 2015

I would suggest to have -j 8 as a command line argument for all make instantiations in all scripts. It does not hurt as far as I know.

On the "30 second" version (1st) I get:

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

Installing Xcode shouldn't be a prerequisite to the "quick'n'dirty" solution IMHO

Long time ago I used "30 sec" version and it served me fine.
Now I tried to update node, tried from various instructions but without success.
Than I came back to this gist and it worked great again.
I just manually downloaded and extracted latest version and used last 3 steps:

./configure --prefix=~/local
make install # ok, fine, this step probably takes more than 30 seconds...
curl -L | sh // - L is from @stanusk comment

Thanks again.

if you installed node with nvm, this also works:

sudo chown -R `whoami` ~/.npm

I installed using git all the way and this works (so far) but only in one terminal window, if I open a second window i get the classic
zsh: command not found: node
Can someone explain why this is happening?

cazzoo commented May 23, 2015

Yet the first script does not work on all distribs.
The ./configure --prefix=~/local did not work.
Use ./configure --prefix=$HOME/local instead

I use the first and worked for me! Thanks a lot..

Toosman commented May 27, 2015

@cazzoo Thank you. I'm running Debian 7 and the PATH setup didn't work (i couldn't just execute #node anywhere) but with your tip it works.

i'm trying the first script but after executing (with no errors) the node-latest-install exists but the node command does nothing. i cant see any executable anywhere in the folder tree. do i need to add something to /bin somewhere. thanks.


I had the same error the thing is you have to install as root
not with sudo curl command

first step :sudo su
second step: curl -L | sh

I tried the first script.

The last one didn't work. It showed

curl | sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 51 100 51 0 0 63 0 --:--:-- --:--:-- --:--:-- 63
sh: 1: Moved: not found

So I tried following (I got from here )
curl -O -L

But it's showing the error. node is not found

npm cannot be installed without node.js.
Install node first, and then try again.

Maybe node is installed, but not in the PATH?
Note that running as sudo can change envs.


VERSION=${VERSION:-$(wget -qO- | sed -nr 's|.*>node-(.*)\.pkg.*|\1|p')}
curl "${VERSION}.pkg" > "$HOME/Downloads/node-latest.pkg"
sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"

c9jester commented Jul 6, 2015

For the top script, I had to change the following:

curl | tar xz --strip-components=1 ./configure --prefix=~/local


curl | tar xz --strip-components=1 ./configure --prefix=$HOME/local


curl | sh


curl -L | sh

Everything else worked fine. Ubuntu Server 14.04.2 LTS

tkanapar commented Jul 6, 2015

In the script we need to change to
The URL has been moved and all the curls pointing to needs to be updated to

wltiii commented Jul 17, 2015

For script, I found the same issue as c9jsester. The original configure prefix argument just shoved everything in a sub folder named ~ in the ~/node-latest-install directory. Not sure why that failed.

I actually split the curl command and install command:

curl -O -L

Running on Linux Mint 17.

kuzeko commented Jul 19, 2015

Same problem as c9jsester and wltiii.
A part from that, I owe you a drink.

simonbcn commented Aug 5, 2015

Supposedly node last versions install npm, why is it necessary install again?
20150805_14 05 22_01

I have execute the second script (only the node part) on Ubuntu 14.04 64 bits and I have to change ~ to $HOME.
It installs all correctly but the npm command doesn't work, it does nothing. However it is installed:

$ ll $HOME/bin/nodejs/bin/
total 15M
-rwxrwxr-x 1 simon simon 15M ago  5 13:42 node*
lrwxrwxrwx 1 simon simon  38 ago  5 13:43 npm -> ../lib/node_modules/npm/bin/npm-cli.js*

$ ll $HOME/bin/nodejs/lib/node_modules/npm/bin/npm-cli.js 
-rwxrwxr-x 1 simon simon 1,9K ago  5 13:43 /home/simon/bin/nodejs/lib/node_modules/npm/bin/npm-cli.js*

I don't find the problem.

simonbcn commented Aug 5, 2015

The third option is an aberration on Linux and a security breach.

simonbcn commented Aug 5, 2015

Finally I've installed it with NVM. I think is the easiest and working option.

h02e56 commented Aug 30, 2015

After remove all my spreaded npm modules Option 4 works for me, not using wget.(MacOS)
NVM is a good option but i find more handy n

ogrotten commented Oct 9, 2015

I suppose these are great for a fresh setup, but what about if I already have a bunch of shit installed?

Please remove 30-seconds. it's a lie.
It' took over 30 minutes, I can't wait then ctrl - c to stop it . Hate this lie.

In please change line 10 git clone git:// to git clone git:// as the other repo was archieved.

Add parameter to make indicating total number of CPU cores.
Replace make with make -j 3 if you know you have a dual-core processor.(seems odd, but that's what it says)
Used to speed up build. perfect for my OSX Yosemite took roughly an hour and five minutes using Ubuntu v14.04.03

Same here take over 30 mins to install and stopped the build


I am a very new user to this and have failed my machine many times trying to set up the ember-cli environment properly. In the first assembly you have (create in 30 seconds) do I use the commands verbatim or is there other content I need to include on my own somewhere? Ex. do I need to add a dir path when typing ~/.bashrc?

Again forgive me I am a total green pea here so thank you for the time!

Said already but apparently ignored: Node is now at, not the repo given in the code. Updating it to save guys like me 20 minutes of hairpulling would be a kindness.

Well, this has been a fun use of an hour that could have been spent on something productive.

make[1]: *** [/home/username/node/out/Release/] Error 1
make[1]: Leaving directory `/home/username/node/out'
make: *** [node] Error 2 [~]# cd npm [~/npm]# make install
scripts/ doc/cli/ man/man1/npm-ls.1
make[1]: Entering directory `/home/username/npm'
node cli.js install marked-man --no-global
bash: node: command not found
make[1]: *** [node_modules/.bin/marked-man] Error 127
make[1]: Leaving directory `/home3/username/npm'
make: *** [man/man1/npm-ls.1] Error 2 [~/npm]# 

If it's 2016 or later, and you're on Bluehost, I hope you see this comment before you spent any time on this. Don't bother. None of these methods work anymore on Bluehost.

None of the above methods worked:

sh: 1: Moved: not found

anton@Charles:~/Documents/software/node$ ./
mkdir: cannot create directory ‘/home/anton/local’: File exists
Cloning into 'node'...
remote: Counting objects: 145792, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 145792 (delta 3), reused 1 (delta 1), pack-reused 145783
Receiving objects: 100% (145792/145792), 126.50 MiB | 2.24 MiB/s, done.
Resolving deltas: 100% (107796/107796), done.
Checking connectivity... done.
./ line 12: ./configure: No such file or directory
make: *** No rule to make target install'. Stop. Cloning into 'npm'... remote: Counting objects: 52427, done. remote: Compressing objects: 100% (84/84), done. remote: Total 52427 (delta 48), reused 0 (delta 0), pack-reused 52343 Receiving objects: 100% (52427/52427), 26.04 MiB | 2.83 MiB/s, done. Resolving deltas: 100% (28953/28953), done. Checking connectivity... done. scripts/ doc/cli/ man/man1/npm-cache.1 make[1]: Entering directory/home/anton/Documents/software/node/npm'
node cli.js install marked-man --no-global
bash: node: command not found
make[1]: *** [node_modules/.bin/marked-man] Error 127
make[1]: Leaving directory `/home/anton/Documents/software/node/npm'
make: *** [man/man1/npm-cache.1] Error 2

anton@Charles:~/Documents/software/node$ ./
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 4874k 100 4874k 0 0 1579k 0 0:00:03 0:00:03 --:--:-- 1579k
Checking for program g++ or c++ : /usr/bin/g++
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for g++ : ok
Checking for program gcc or cc : /usr/bin/gcc
Checking for gcc : ok
Checking for library dl : yes
Checking for openssl : not found
Checking for function SSL_library_init : not found
Checking for header openssl/crypto.h : not found
/home/anton/Documents/software/node/node-install/node-v0.4.3/wscript:340: error: Could not autodetect OpenSSL support. Make sure OpenSSL development packages are installed. Use configure --without-ssl to disable this message.
Project not configured (run 'waf configure' first)
make: *** [install] Error 1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 51 100 51 0 0 192 0 --:--:-- --:--:-- --:--:-- 192
sh: 1: Moved: not found

anton@Charles:~/Documents/software$ ./
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 51 100 51 0 0 143 0 --:--:-- --:--:-- --:--:-- 143
sh: 1: Moved: not found

For a much easier method see

kauffj commented Mar 15, 2016

It looks like curl -L is required at least on some systems.

node and npm installation

I just tried this, the last command didn't work.
Do I get in any trouble for leaving this out? Probably not installed completely.

 curl | sh  *failed*

saying: file location not found.

@magick93 After some searching:

 curl -k -L | sh

is the solution to your first installation if you still need it.
-k flag for a insecure connection and -L flag for a redirect if it can't find the location.

sudo chown -R $USER /usr/local/{share/man,bin,lib/node,include/node}

This is a rather bad idea. One of the minor ways in which Linux security is less bad than that of Windows is that normally you don't have write access to any directories on your $PATH so it's harder for any exploit which can write arbitrary files to get them executed. To execute something not on the path you have to give the directory explicitly (e.g. “./a.out” rather than just “a.out”) which happens less often and is usually well controlled. By opening up /usr/local/bin to writes by any software you use you make your system a tiny bit more vulnerable.

I wonder if installing npm as its own user (say, “npm”) would be the best solution. To install something you'd use “ssh npm@localhost npm install --global some_package”. With the right prefix set up all uses of the packages could proceed as currently. Including it in the path for command line packages would be possible though ~npm/(bin|lib?)/command wouldn't be too terrible to type.

For posterity (since it took me a while to figure this one out).

If, while running the first script, you come across an error similar to this one:

g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions.
make[1]: *** [/home/ubuntu/.nvm/src/node-    v0.8.1/out/Release/] Error 4
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory `/home/ubuntu/.nvm/src/node-v0.8.1/out'
make: *** [node] Error 2
nvm: install v0.8.1 failed!

You might want to check if your system has a swap file set up.


And you might want to replace the last line with:

curl -L | sh


BellAppLab, your suggestion worked for me. And it's super easy. Thank you...

Using nvm was much easier and faster:

curl -o- | bash
# open new shell
command -v nvm # should output "nvm"
nvm install node

... done in 30 seconds and installed node 6.6

ashrih commented Oct 17, 2016

i have Q about the mocha test, i have done the first step but my Q is are mocha going to test all the files ?

bw2 commented Dec 16, 2016

thanks @shadiakiki1986
That worked.

Cheers, this really helped me with my new nutrition blog.

dimkk commented Jan 20, 2017


As of March 2017, which methodology is the best? My use case is bizarre. We have an OpenStack prod server that's only on Node 0.10. We have like no permissions on the prod server except one directory where our code goes. So literally going to try to put the latest node version in our project, desperate times desperate measures. LOL.

hello guys i installed Laravel 5 Simple CMS but when i open browser i receive this error

QueryException in Connection.php line 647:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'yp.settings' doesn't exist (SQL: select * from settings limit 1)

dandv commented Jun 14, 2017

Hey everyone, newsflash: GitHub doesn't send notification email for gists!

So it's nice and all to say Thanks and ask questions, but don't be surprised that isaacs hasn't replied since 2014.

Magarusu commented Jul 6, 2017

Hi, I needed to install an older version of node and I did
curl -L | tar xz --strip-components=1
The problem is that npm install throws an error saying that my node version is outdated.

You are using an outdated and unsupported version of
node (v0.4.8). Please update node and try again.

Does anyone know how I could install an older version of npm to work with node?

tbone849 commented Oct 5, 2017

@shadiakiki1986 Thank you. Worked perfect.

curl -o- | bash
# open new shell
command -v nvm # should output "nvm"
nvm install node

Worked on Bluehost as of 10/5/17.

First option worket fine to me <3

curl -L | bash

This is by far the simplest way to get started with both n and Node.js - even if you're looking to install only the latest stable Node.js version, with no (immediate) plans to install multiple versions.

n is installed as follows:

  • The installation target is a dedicated directory, which defaults to ~/n and can be overridden with environment variable N_PREFIX; n itself as well as the active Node.js version are placed there.
    • When overriding, it is advisable to choose a user location - typically, a subfolder of ~ (at any level) - so as to avoid the need to use sudo for installation of global npm packages.
    • Either way, the target directory must either not exist yet or be empty.
    • Using a dedicated directory to hold both n and the Node.js versions greatly simplifies later uninstallation.
  • If your shell is bash, ksh, or zsh, the relevant shell initialization file is modified:
    • Environment variable N_PREFIX is defined to point to the installation directory.
    • Directory $N_PREFIX/bin is appended to the $PATH, unless already present.
    • For other shells, these modification must be performed manually; instructions are provided during installation.
    • You can also explicitly suppress modification with the -n option.
  • By default, the latest stable Node.js version is installed; you can suppress that or even specify multiple Node.js versions to install.
  • Note that any preexisting n, Node.js installation must be removed before using this installation method.
  • All installation prerequisites are met by default on OSX and some Linux distros; notably, git and curl must be present - see Installing n for details.
  • After installation, be sure to open a new terminal tab or window or reload your shell initialization file before attempting to use n / Node.js - see

See examples below, and Installing n for prerequisites and installation options.


See Installation options for details.

  • Installation with confirmation prompt to default location $HOME/n and installation of the latest stable Node.js version:
curl -L | bash
  • Automated installation to default location $HOME/n and installation of the latest stable Node.js version:
curl -L | bash -s -- -y
  • Automated, quiet installation to default location $HOME/n and installation of the latest stable Node.js version; no status information
    is displayed:
curl -sL | bash -s -- -q
  • Automated installation to the default location, with subsequent installation of the latest LTS
    (Long Term Support) version, and the latest 0.10.x release:
curl -L | bash -s -- -y lts 0.10
  • Automated installation to custom location ~/util/n, with subsequent installation of the latest stable Node.js version:
curl -L | N_PREFIX=~/util/n bash -s -- -y

Installing n

Supported platforms and prerequisites

Among the platforms supported by n, any Unix-like platform with the following is supported:


eltrhn commented Dec 19, 2017

@isaacs - The GitHub links for NodeJS and npm should be edited respectively to git:// and git:// (especially in the case of the former where git clone git:// will clone the archive)

missxu commented Dec 21, 2017

This is awesome - exactly what I was looking for. I used option one ('cause I'm lazy and wanted to get on to the hacking) - for those on OSX, install XCode first. Also, I ended up getting a 301 Moved Permanently error but I just did subbed in:

curl -L | sh

and now it looks like I'm gtg.

madurimanoj commented Jan 12, 2018

@isaacs the second one works, if your macbook/iMAc doesn't allow the git clone just download the zip of node/npm and you can do the remaining from the downloads itself. It works, Thanks.

I am on RHEL 7. What does the final line in the 30 seconds procedure do: curl | sh

I keep getting error and fails because I am behind a proxy and I would have to fix it. Do I need it?
It seems my node --version and npm --version shows shows the latest version anyway when I run them.

testLit commented Feb 13, 2018

I am using CentOS 7 and ran first script. I ran the last script as:

curl -k -L | sh

when i tried checking the version says: no such file or directory.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment