4

When I give command npm install express it throws following error. On ubuntu machine

gaurav@gaurav-Mini-Monster:~/TestScripts$ sudo npm install -g express
npm ERR! error installing express@3.3.3 Error: Unsupported
npm ERR! error installing express@3.3.3     at checkEngine (/usr/local/lib/node_modules/npm/lib/install.js:493:14)
npm ERR! error installing express@3.3.3     at Array.0 (/usr/local/lib/node_modules/npm/node_modules/slide/lib/bind-actor.js:15:8)
npm ERR! error installing express@3.3.3     at LOOP (/usr/local/lib/node_modules/npm/node_modules/slide/lib/chain.js:15:13)
npm ERR! error installing express@3.3.3     at chain (/usr/local/lib/node_modules/npm/node_modules/slide/lib/chain.js:20:4)
npm ERR! error installing express@3.3.3     at installOne_ (/usr/local/lib/node_modules/npm/lib/install.js:470:3)
npm ERR! error installing express@3.3.3     at installOne (/usr/local/lib/node_modules/npm/lib/install.js:411:3)
npm ERR! error installing express@3.3.3     at /usr/local/lib/node_modules/npm/lib/install.js:347:9
npm ERR! error installing express@3.3.3     at /usr/local/lib/node_modules/npm/node_modules/slide/lib/async-map.js:54:35
npm ERR! error installing express@3.3.3     at Array.forEach (native)
npm ERR! error installing express@3.3.3     at /usr/local/lib/node_modules/npm/node_modules/slide/lib/async-map.js:54:11
npm ERR! error rolling back express@3.3.3 Error: UNKNOWN, Unknown error '/usr/local/lib/node_modules/express'
npm ERR! Unsupported
npm ERR! Not compatible with your version of node/npm: connect@2.8.3
npm ERR! Required: {"node":">= 0.8.0"}
npm ERR! Actual:   {"npm":"1.0.106","node":"0.5.11-pre"}
npm ERR! 
npm ERR! System Linux 3.2.0-48-generic-pae
npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "express"
npm ERR! cwd /home/gaurav/TestScripts
npm ERR! node -v v0.5.11-pre
npm ERR! npm -v 1.0.106
npm ERR! code ENOTSUP
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/gaurav/TestScripts/npm-debug.log
npm not ok

I also tried

sudo npm install express
npm install -g express
sudo npm install -g express

Nothing works.

Gaurav
  • 788
  • 2
  • 13
  • 27

2 Answers2

16

Node is so easy to install manually. I like doing it this way too because it's really easy to switch versions.

This is also great because you don't need to add some external package repository to apt, and you don't have to wait for those repositories to update when node releases a new version. You can get updates as soon as they're released.

# make a `~/.nodes/ folder
mkdir -p ~/.nodes && cd ~/.nodes

# download the binaries from nodejs.org
# in this case, here's the linux version
curl -O http://nodejs.org/dist/v0.10.12/node-v0.10.12-linux-x64.tar.gz

# extract
tar -xzf node-v0.10.12-linux-x64.tar.gz

# rename folder to 0.10.12
mv node-v0.10.12-linux-x64 0.10.12

# create a `current` symlink
ln -s 0.10.12 current

# prepend ~/.nodes/bin to your path
# you'll want to save this in ~/.bashrc or ~/.zshrc or something
export PATH="~/.nodes/current/bin:$PATH"

# cleanup
rm ~/.nodes/node-v0.10.12-linux-x64.tar.gz

The best part about this is you can repeat the pattern for any other version of node, change the current symlink at any time to switch which version you're running, and you're good to go

% node --version
v0.10.12

% npm --version
1.2.32

# switch versions to (e.g.) 0.10.5
% cd ~/.nodes && rm current && ln -s 0.10.5 current

% node --version
v0.10.5

% npm --version
1.2.18

Additional pointers when writing executable scripts

Make an executable file

% touch ~/somefile && chmod +x ~/someifle && nano ~/somefile

File contents

#!/usr/bin/env node
console.log(process.version);

Run it

% ./somefile
v0.10.12
Mulan
  • 129,518
  • 31
  • 228
  • 259
  • Thanks @naomik. I used same approach of upgrading node using source. Issue solved. Lesson learnt :) – Gaurav Jul 04 '13 at 17:59
10

You are running a much-too-old version of node and npm. You have node v0.5 which is very out of date. Upgrade to node v0.10 and things will work.

Modern node.js versions for Ubuntu are available via this PPA from Chris Lea

To install:

sudo apt-get install python-software-properties
sudo add-apt-repository --yes ppa:chris-lea/node.js
sudo apt-get install nodejs

UPDATE

It looks like your old version of node is installed at /usr/local/bin/node. The new version from the Chris Lea PPA will be at /usr/bin/node. So to verify all is well, do:

/usr/bin/npm --version #Should be approx 1.2
/usr/bin/node --version #should be approx v0.10
/usr/bin/npm install -g express

You should uninstall the local node, or fix your PATH:

export PATH=/usr/bin:$PATH
Peter Lyons
  • 142,938
  • 30
  • 279
  • 274
  • 3
    I have correctly identified your problem. If you aren't going to put more effort than "It did not work" into helping us help you, you don't deserve our help. – Peter Lyons Jul 04 '13 at 16:48
  • @PeterLyons at first your comment seemed a bit enraged to me, but I've readed better the question and your answer, and you're completelly correct. – gustavohenke Jul 04 '13 at 16:50
  • sudo apt-get install python-software-properties -> this command works well. add-apt-respository command also works well. But sudo apt-get install nodejs executes but still showing me node --version to v0.5.11-pre – Gaurav Jul 04 '13 at 17:21
  • See my update. You have both the old and new versions now and need to be sure to use the new version. – Peter Lyons Jul 04 '13 at 17:48