I'm on a unix box where I don't have root access.
I changed my .npmrc file (in my user's root directory) to:
prefix=~/global_npm
Now when I do "npm install -g packagename" it installs inside my global_npm directory. Which is good. And then I gave myself path access to it by updating my .bashrc file with:
export PATH=$PATH:~/global_npm/bin
Do I need to do anything else? I think I need to set NODE_PATH but I'm not sure?
Sindre Sorhus has a great guide at github.com/sindresorhus/guides which I've reposted here.
npm installs packages locally within your projects by default. You can also install packages globally (e.g. npm install -g <package>) (useful for command-line apps). However the downside of this is that you need to be root (or use sudo) to be able to install globally.
Here is a way to install packages globally for a given user.
mkdir "${HOME}/.npm-packages"
.bashrc/.zshrc:NPM_PACKAGES="${HOME}/.npm-packages"
npm where to store your globally installed package. In your $HOME/.npmrc file add:prefix=${HOME}/.npm-packages
node will find them. Add the following to your .bashrc/.zshrc:NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
.bashrc/.zshrc:PATH="$NPM_PACKAGES/bin:$PATH"
# Unset manpath so we can inherit from /etc/manpath via the `manpath`
# command
unset MANPATH # delete if you already modified MANPATH elsewhere in your config
MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
Check out npm-g_nosudo for doing the above steps automagically
NOTE: If you are running OS X, the .bashrc file may not yet exist, and the terminal will be obtaining its environment parameters from another file, such as .profile or .bash_profile. These files also reside in the user's home folder. In this case, simply adding the following line to them will instruct Terminal to also load the .bashrc file:
source ~/.bashrc
That's pretty much all you need to do if you are installing binary utilities (which I gather you are as you updated your PATH).
NODE_PATH will only need to be set you have installed a module that you want to require() from unrelated node scripts, but you shouldn't really do this anyway. Modules that are required as dependencies for other modules/scripts should be installed locally (i.e. specified in a package.json) as that way you keep strict control over versions.
Edit: The accepted answer here explains it much better than I was able to: How do I install a module globally using npm?
P.S. BTW changing the global npm directory can be done with a command: npm config set prefix ~/global_npm
Unless you require a package installation due to dependencies, which are rare, I would recommend you use NVM (https://github.com/creationix/nvm) to install Node.
If you do this without sudo, you will also not need to use sudo when globally installing modules.
Try to switch user:
su - username
If you don't have another user try:
useradd username
Then,
su - username