Express module not found when installed with NPM
When I try to run the app.js
file created by express, I get the following error:
$ node app.js
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Cannot find module 'express'
at Function._resolveFilename (module.js:320:11)
When I type in express --version
I get a return statement of 2.3.3
. I used npm to install express. I had to manually make npm using these instructions:
git clone http://github.com/isaacs/npm.git
cd npm
sudo make install
The error is Error: Cannot find module 'express'
.
Do I need to do something after installing npm and express in order to make express see the modules created by npm?
- My node is version: 0.4.6
- My express is version: 2.3.3
- My npm is version: 1.0.6
Express is installed globally. I used the -g
flag to install it.
Edit: When I try "node -e require.paths"
I get:
[ '/home/user/.node_modules',
'/home/user/.node_libraries',
'/usr/local/lib/node' ]
So, node isn't detecting the npm installation. How do I get node to detect the npm installation?
-
Install express
npm install -g express
-
Create a new app
express your_app
-
cd into app directory
cd your_app
-
use npm link to resolve modules
npm link express
Use local installs for require(), and global installs for command-line apps.
If you need both, use the npm link
command.
On Ubuntu 12.04 you have to add the export NODE_PATH=/usr/local/lib/node_modules
to your /.bashrc to use globally installed modules.
It appears that while npm had been updated to install global modules into /usr/local/lib/node_modules
, Node's own require.paths
does not yet reflect this change.
There are two reasonable solutions:
-
Add the following code to the top of your application:
require.paths.push('/usr/local/lib/node_modules');
Pro: non-invasive, easy to add
Con: requires discipline, future versions of node will restrict access to
require.paths
-
As root, execute:
ln -s /usr/local/lib/node_modules /usr/local/lib/node
Pro: reasonably non-invasive
Con: requires root, modifies linux fs, might not survive system updates
I had the same problem. This worked for me though:
Seems like npm (now?) installs node modules to /usr/local/lib/node_modules/
and not /usr/local/lib/node/
What I did was simply to copy everything from node_modules to node: sudo cp -r /usr/local/lib/node_modules/* usr/local/lib/node/
and now it seems to be working for me.
Hope this helps you :-)