Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Express.js: No Such file or directory

I installed node with apt-get install nodejs. Then I installed npm with apt-get install npm. Now when I try to run express I get

$ express  /usr/bin/env: node: No such file or directory 

How do I resolve this error?

like image 480
NO WAR WITH RUSSIA Avatar asked Feb 16 '13 20:02

NO WAR WITH RUSSIA


People also ask

How do I fix error Enoent No such file or directory open?

To resolve the ENOENT warning message, you need to add a package. json file in the directory where you run the npm install command. And then run your npm install command again. This time, the warning message should not appear.

What causes Enoent?

It's an abbreviation of Error NO ENTry (or Error NO ENTity), and can actually be used for more than files/directories. It's abbreviated because C compilers at the dawn of time didn't support more than 8 characters in symbols.


2 Answers

There are two package in Ubuntu that have similar names, node and nodejs.

node does this,

Description-en: Amateur Packet Radio Node program. The node program accepts TCP/IP and packet radio network connections and presents users with an interface that allows them to make gateway connections to remote hosts using a variety of amateur radio protocols.

nodejs does this,

Description-en: Node.js event-based server-side javascript engine Node.js is similar in design to and influenced by systems like Ruby's Event Machine or Python's Twisted. It takes the event model a bit further - it presents the event loop as a language construct instead of as a library. Node.js is bundled with several useful libraries to handle server tasks : System, Events, Standard I/O, Modules, Timers, Child Processes, POSIX, HTTP, Multipart Parsing, TCP, DNS, Assert, Path, URL, Query Strings.

Fedora also follows a similar package naming scheme. Because of this, the binary in nodejs had to be renamed to nodejs from the original node. However, this isn't technically kosher: and most nodejs programs (and libraries installed with npm) assume that the node binary is node. If you want to get around this the easiest way is just symlink the two together. If you take this route, don't install the node package which handles the Amateur Packet Radio stuff.

sudo ln -s /usr/bin/nodejs /usr/local/bin/node 

Alternatively, in the case of node, I'd suggest using n and not installing node. Just install npm (which will install node), then remove npm, then tell apt to clean it up. To do this, simply run

sudo apt-get install npm sudo npm install -g n sudo n latest sudo apt-get --purge remove npm sudo apt-get autoremove 

There are other binary distro managers that even work from a shell script like nvm but I personally prefer n. Think of n like an apt for just one thing: the node binary which it installs to /usr/local/bin.

Why are removing npm? We're not. apt-get --purge remove can only ever remove things installed by the package manager. n latest works outside of the package manager. There are two npms if you do this,

  1. version installed by the distro (Debian/Ubuntu) using apt-get.
  2. version installed by n latest.

No point in having the distro's older version. And, even worse, if that version works it can potentially install to a different location and have Debian modifications in it that assume Debian install directories. It's better to use either/or but not both.

like image 200
NO WAR WITH RUSSIA Avatar answered Sep 19 '22 22:09

NO WAR WITH RUSSIA


you should install nodejs-legacy package which have a link from /usr/bin/node to /usr/bin/nodejs

$ sudo apt-get install nodejs-legacy

like image 21
Sergey Fedoseev Avatar answered Sep 19 '22 22:09

Sergey Fedoseev