Last active

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

Use one of these techniques to install node and npm without having to sudo. Discussed in more detail at http://joyeur.com/2010/12/10/installing-node-and-npm/ Note: npm >=0.3 is *safer* when using sudo.

View node-and-npm-in-30-seconds.sh
1 2 3 4 5 6 7 8 9
echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
. ~/.bashrc
mkdir ~/local
mkdir ~/node-latest-install
cd ~/node-latest-install
curl http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1
./configure --prefix=~/local
make install # ok, fine, this step probably takes more than 30 seconds...
curl https://www.npmjs.org/install.sh | sh
View node-and-npm-in-30-seconds.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# 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://github.com/joyent/node.git
cd node
./configure --prefix=~/local
make install
cd ..
 
git clone git://github.com/isaacs/npm.git
cd npm
make install # or `make link` for bleeding edge
View node-and-npm-in-30-seconds.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 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 http://nodejs.org/dist/node-v0.4.3.tar.gz | tar -xzf - -C node-install
cd node-install/*
./configure
make install
 
# now the npm easy-install
curl https://www.npmjs.org/install.sh | sh
View node-and-npm-in-30-seconds.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# use nave, but without a subshell
# note that we're doing "usemain" instead of "use"
 
mkdir ~/.nave
cd ~/.nave
wget http://github.com/isaacs/nave/raw/master/nave.sh
sudo ln -s $PWD/nave.sh /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 https://www.npmjs.org/install.sh | sh
View node-and-npm-in-30-seconds.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
# 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
wget http://github.com/isaacs/nave/raw/master/nave.sh
sudo ln -s $PWD/nave.sh /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 https://www.npmjs.org/install.sh | sh
 
# do stuff...
npm install whatever etc
 
# return to non-nave-land
exit
 
# use a different version of node..
nave use 0.4.6
# etc...
View node-and-npm-in-30-seconds.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# 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 https://www.npmjs.org/install.sh | sh
View node-and-npm-in-30-seconds.sh
1 2 3 4 5 6 7 8 9 10
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 http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1
./configure --prefix=~/.local
make install
curl https://www.npmjs.org/install.sh | sh
View node-and-npm-in-30-seconds.sh
1 2 3 4 5 6
# 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 https://www.npmjs.org/install.sh | sh

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

For me the 2nd one worked ^^ thx

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}
Owner

Thanks, Robert, good catch. Fixed.

The 2nd script (only-git-all-the-way.sh) has a wrong URL for cloning node. It should read:

git clone https://github.com/ry/node.git

instead of

git clone git://github.com/ry/node.git

ok..cool.

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

Thanks for share!! good work!

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

Owner

@rbotman: Thanks.

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

d2s commented

There is one quite nasty error in only-git-all-the-way.sh example:

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

Re: https://gist.github.com/579814#file_take_ownership.sh

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

Help !!
whenever the command
curl http://npmjs.org/install.sh | 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! http://github.com/isaacs/npm/issues
npm ERR! or email it to:
npm ERR! npm-@googlegroups.com
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

Owner

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

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).

Thank DTrejo.

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

joar commented

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.

Owner
vkelman commented

I'm getting the same error as edlongman trying to run curl http://npmjs.org/install.sh | 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: https://gist.github.com/957346

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 "only_git_all_the_way.sh". 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

@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 only-git-all-the-way.sh 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

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://github.com/joyent/node.git
cd node
./configure --prefix=~/local --without-ssl
make install
cd ..

git clone git://github.com/isaacs/npm.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" )

Update

Solved with

echo prefix = ~/local >> ~/.npmrc
curl http://npmjs.org/install.sh | sh
rumkin commented

Why does

require('npm-name');

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

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

Also I had problems with npm: http://stackoverflow.com/questions/6383413/npm-install-issues-ubuntu-11-04

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

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

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 https://sites.google.com/site/nodejsmacosx/

Owner

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 http://npmjs.org/install.sh | 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=/usr/bin/tar
version:
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 http://gnu.org/licenses/gpl.html.
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 buid-doc.sh.

I had to add:

chmod 755 nave.sh

before line 10 in order for https://gist.github.com/579814#file_use_nave.sh 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 http://npmjs.org/install.sh | 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 http://npmjs.org/install.sh | 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!

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 https://gist.github.com/579814#file_only_git_all_the_way.sh, 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
fs.js:280
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: ENOENT, no such file or directory '~/local/lib/node_modules/npm/bin/npm-cli.js'
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/obj.target/v8_base/deps/v8/src/accessors.o ../deps/v8/src/accessors.cc
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 ~
wget https://npmjs.org/install.sh
chmod +x install.sh
sudo ./install.sh

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.

https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

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

Worked here. Ubuntu 13.04 64 bits. Thanks :)

symsun commented

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

top worked beautifully! thanks man!

Jerbot commented

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."

The configure script for only-git-all-the-way.sh 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...

WTF?

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 http://nodejs.org/ and download installer in the first place.

leto commented

./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

I love this.....works like charm
keep up the good work

Thank you so much!

Thanks!!
Your awesome script node-and-npm-in-30-seconds.sh 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 http://nodejs.org/dist/node-v0.4.3.tar.gz | tar -xzf - -C node-install

should be

curl http://nodejs.org/dist/v0.10.20/node-v0.10.20.tar.gz | tar -xzf - -C node-install

node-and-npm-in-30-seconds.sh 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.
Getting
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?

@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: https://github.com/creationix/nvm
# added bonus: gives you the opportunity to switch node versions
 
# install nvm
curl https://raw.github.com/creationix/nvm/master/install.sh | 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.

Wonderful...

This is beautiful.

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

#!/bin/bash
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

Just as a heads up, for the "node-and-npm-in-30-seconds.sh" gist I had to add www to the npmjs URL since it was returning HTML. Ex:

$ curl --proxy [proxy here] https://npmjs.org/install.sh install.sh
< html>Moved: < a href="https://www.npmjs.org/install.sh">https://www.npmjs.org/install.sh< /a>
< html>
...

Hi Isaac,

I have updated the 30 seconds install to the new npm url. Here is the link to the gist https://gist.github.com/aebm/9047011

Regards

Can someone explain what each step in "node-and-npm-in-30-seconds.sh" does? I'd like to know the reasons behind each line.

Hi Isaac

I am trying to use the npm install procedure "node-and-npm-in-30-seconds.sh" (actually part of a Dockerfile I am creating to install cartoDB).

The final output is this:

...
creating ./config.gypi
creating ./config.mk
% 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?

Hi Isaac

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

Cloning into 'npm'...
rm -rf \
.building_ronn \
html/doc \
html/api \
man
scripts/doc-build.sh doc/api/npm-test.md 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 nodejs.org 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?

Thanks,

Just a note, right now npmjs.org is throwing 301 redirects when you try and access without prefixing the www subdomain https://npmjs.org/install.sh

e.g.

curl -v https://npmjs.org/install.sh

The solution is to either manually change for the redirect

curl -v https://www.npmjs.org/install.sh

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

curl -Lv https://www.npmjs.org/install.sh

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

Owner

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

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]
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/User/calvin/local/bin

can I add it like

~/local/lib
~/local/bin

??

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

@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.

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 use-nave.sh 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/nave.sh

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.

I use the second, and it works.

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 take-ownership.sh approach. Please, do the following:

  • replace http://nodejs.org/dist/node-v0.4.3.tar.gz with http://nodejs.org/dist/node-latest.tar.gz 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 https://www.npmjs.org/install.sh | sudo sh (I had EACCESS error).

Thanks!

On my gentoo system I get:

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

../../src/weak_collection.js ../../src/promise.js ../../src/object-observe.js ../../src/macros.py
Traceback (most recent call last):
File "../../tools/js2c.py", line 514, in
main()
File "../../tools/js2c.py", line 510, in main
JS2C(args[3:], args[0], args[1], args[2], options.raw, options.omit)
File "../../tools/js2c.py", line 481, in JS2C
sources = PrepareSources(source)
File "../../tools/js2c.py", 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

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
wget http://nodejs.org/dist/v0.10.29/node-v0.10.29.tar.gz

tar -zxvf node*
cd node*
./configure --prefix=/home/rann/local
make
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 https://www.npmjs.org/install.sh | 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

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 http://github.com/isaacs/nave/raw/master/nave.sh
$ sudo ln -s $PWD/nave.sh /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!

re: node-and-npm-in-30-seconds.sh

curl https://www.npmjs.org/install.sh | sh

resulted in

curl: (51) SSL: certificate subject name 'a.sni.fastly.net' does not match target host name 'www.npmjs.org'

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

which npm
~/local/bin/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 node-and-npm-in-30-seconds.sh 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?

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

Thanks..

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 https://www.npmjs.org/install.sh | sh

WONDERFULL!!!

Hello,

I tried to install Semantic UI using the git only method. I went through the installation and after "npm install" ( http://learnsemantic.com/guide/expert.html#project-dependencies ) 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 'node-and-npm-in-30-seconds.sh' in my Vagrant provision with the npm part which was not happening last week. Using 'curl -L https://npmjs.org/install.sh | sh' instead (as suggested on npmjs.com) resolved my problem. Cheers~

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

wget http://nodejs.org/dist/latest/node-v0.10.34.tar.gz

I had the same problem and solution as cristovaov

Had the same problem as cristovaov - curl -L https://www.npmjs.org/install.sh | sh (added -L to follow redirect) worked.

@isaacs, all of the scripts should have https://www.npmjs.org/install.sh replaced by https://www.npmjs.com/install.sh because you changed the website address. Also, the description should be updated - with http://joyeur.com/2010/12/10/installing-node-and-npm being replaced by https://www.joyent.com/blog/installing-node-and-npm which has also changed. Otherwise, these are great little scripts, and really easy to customise. Thanks a lot!

Thanks,
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 node-and-npm-in-30-seconds.sh
    • change last line as @cristovaov suggested curl -L https://www.npmjs.org/install.sh | sh
  3. .npm dir stays the same so I didn't lose any of my plugins

Thanks for the gists, I've used the 'node-and-npm-in-30-seconds.sh' 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 https://www.npmjs.org/install.sh | sh)

Thanks, this is great. Great success with 'node-and-npm-in-30-seconds.sh'.

FWIW, curl https://www.npmjs.org/install.sh says it's permanently moved to www.npmjs.com. Yeah, adding -L to make curl follow redirects works, but it seems more straightforward to replace .org with .com.

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 https://www.npmjs.org/install.sh | sh" is needed. I chose the "xgd-freedesktop.org-style.sh" 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 https://www.npmjs.org/install.sh | sh" command is required?

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

This should be changed: https://www.npmjs.org/install.sh
to this: https://www.npmjs.com/install.sh

$ curl https://www.npmjs.org/install.sh | 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 only-git-all-the-way.sh 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://github.com/joyent/node.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- https://raw.githubusercontent.com/creationix/nvm/v0.23.3/install.sh | bash

(I determined the latest nvm version available -- and a lot of other, really helpful information -- at: https://github.com/creationix/nvm)

To have nvm automatically sourced, accessible at login:

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

Now, as root (of course):
vi /etc/bash.bashrc
And add this to the end:
export NVM_SYMLINK_CURRENT=true
(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):
/home/dmpelletier/.nvm/versions/node/v0.12.0/bin/node
/home/dmpelletier/.nvm/versions/node/v0.12.0/bin/npm

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

To

./configure --prefix=$HOME/local

as well as added -L to

curl -L https://www.npmjs.org/install.sh | sh

@deesejohn Thank you very much!

Hi
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! code ENOPACKAGEJSON
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
to
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 http://nodejs.org/dist/v0.12.0/node-v0.12.0-linux-x64.tar.gz and extract it some where. then add some where/bin to path. You can download other binary from here: http://nodejs.org/download/

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 https://raw.githubusercontent.com/creationix/nvm/v0.24.0/install.sh | 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.