Node Version Manager (NVM) npm installing modules to common folder
Based on the comments from https://github.com/creationix/nvm/pull/97:
When installing packages with npm using the global switch -g the package ends up in the proper directory (i.e. .nvm/$VERSION/lib/node_modules), however node is unable to require it since it somehow isn't searching on it's prefix.
So using npm install -g xxxxx
will put the modules in the correct location for NVM but if you try to require
one of them node can't find the module. I am still playing around with this and will update if I find a solution.
Update
Where does NPM put node_modules? (see https://docs.npmjs.com/files/folders)
- Local install (default): puts stuff in ./node_modules of the current package root.
- Global install (with -g): puts stuff in /usr/local or wherever node is installed.
- Install it locally if you're going to
require()
it. - Install it globally if you're going to run it on the command line.
- If you need both, then install it in both places, or use
npm link
.
So what I did was run npm init
(see http://npmjs.org/doc/init.html) in my projects root dir which generated package.json. Now when I run npm install xxxxx
it creates a node_modules dir in my project folder (which I add to my .gitignore). This works for modules that I require in my code.
For commands such as CoffeeScript I install with npm install -g coffee-script
which puts it in the correct directory (.nvm/$VERSION/lib/node_modules). While I can't require these modules (npm link should solve this problem) I can run the commands - i.e. coffee
.
I just installed express globally (-g) and was having problem when require("express"). Just like Jesse Vogt said I just reinstalled express but this time without the -g just like this: "sudo npm install express" and now is working perfectly!