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:

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

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