Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Node Version Manager (NVM) npm installing modules to common folder

Tags:

node.js

I've installed NVM for node.js using the instructions from this post:

http://www.backdrifter.com/2011/02/18/using-nvm-and-npm-to-manage-node-js/

When I switch between node versions and then use npm to install a module, all the modules are placed in the same 'node_modules' folder (~/node_modules/) instead of in the 'node_modules' directory specific to that version of node?

Any idea on how to remedy this?

like image 802
grookle Avatar asked Feb 03 '12 18:02

grookle


People also ask

Where does NVM install Nodejs?

js using NVM. The default NVM is installed under current users home directory, So nvm installation with one user will not be accessible to another user. Windows users can visit our other tutorial to install Nodejs on Windows system.

Does npm install create a node_modules folder?

js project, npm automatically creates the node_modules folder to store the modules needed for your project and the package-lock. json file that you examined earlier. The node_modules folder contains every installed dependency for your project.


2 Answers

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.

like image 60
Jesse Vogt Avatar answered Sep 17 '22 14:09

Jesse Vogt


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!

like image 27
Gisael Gustavo Gómez González Avatar answered Sep 19 '22 14:09

Gisael Gustavo Gómez González