Search code examples
node.jsterminalinstallationnpm

Global Node modules not installing correctly. Command not found


I am having a problem installing global node modules and everything I find online says the solve is just adding -g. Which is not the problem. I believe it's a linking issue or wrong directory issue.

Here is what I do:

$ npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.3
...downloads correctly

$ express myapp
bash: express: command not found

However when I run the direct link location to express it works:

   $ /usr/local/share/npm/bin/express myapp

   create : myapp
   create : myapp/package.json
   create : myapp/app.js
... Builds app correctly

Where the module is:

$ which node
/usr/local/bin/node
$ node -pe process.execPath
/usr/local/Cellar/node/0.8.20/bin/node
$ npm link express
/Users/bentonrr/Development/Personal/node_modules/express -> /usr/local/share/npm/lib/node_modules/express

In my .bash_profile I have:

export PATH=/usr/local/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules:/usr/local/lib/node

Do I need to change my Node environment to download to correct folder? Is something not linking correctly? I am lost..

Thanks!

Other Specs:

$ node --version
v0.8.20
$ npm --version
1.2.11
$ brew --version
0.9.4
OSX Version 10.8.2

Solution

  • Add $(npm get prefix)/bin to your PATH (e.g., in .bashrc), like so:

    echo "export PATH=$PATH:$(npm get prefix)/bin" >> ~/.bashrc

    For more info, see npm help npm:

    global mode: npm installs packages into the install prefix at prefix/lib/node_modules and bins are installed in prefix/bin.

    You can find the install prefix with npm get prefix or npm config list | grep prefix.