Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to npm install global not as root?

Tags:

shell

node.js

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?

like image 961
Shai UI Avatar asked Aug 06 '13 19:08

Shai UI


People also ask

How install npm install globally?

Install Package Globally NPM installs global packages into /<User>/local/lib/node_modules folder. Apply -g in the install command to install package globally.

Do I need sudo for npm install?

npmrc or simply using the --prefix will allow you to use npm install -g without sudo .

Is npm install global or local?

In npm 1.0, there are two ways to install things: globally —- This drops modules in {prefix}/lib/node_modules , and puts executable files in {prefix}/bin , where {prefix} is usually something like /usr/local .


2 Answers

Sindre Sorhus has a great guide at github.com/sindresorhus/guides which I've reposted here.


Install npm packages globally without sudo on OS X and Linux

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.

1. Create a directory for your global packages

mkdir "${HOME}/.npm-packages" 

2. Reference this directory for future usage in your .bashrc/.zshrc:

NPM_PACKAGES="${HOME}/.npm-packages" 

3. Indicate to npm where to store your globally installed package. In your $HOME/.npmrc file add:

prefix=${HOME}/.npm-packages 

4. Ensure node will find them. Add the following to your .bashrc/.zshrc:

NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH" 

5. Ensure you'll find installed binaries and man pages. Add the following to your .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 
like image 82
Rowno Avatar answered Sep 28 '22 00:09

Rowno


Many setups already expect binaries to be found in ~/.local/bin/. So this answer follows that convention. Other files will get installed to ~/.local/lib/node_modules/.

1. Configure npm

Run:

npm config set prefix '~/.local/' 

This modifies ~/.npmrc to include this line:

prefix=~/.local/ 

2. Make sure ~/.local/bin exists and is in your PATH

Run echo "$PATH" to have a look at your path. If it does not include ~/.local/bin/ already, you will need to configure your system to include it.

mkdir -p ~/.local/bin echo 'export PATH=~/.local/bin/:$PATH' >> ~/.bashrc 

Replace .bashrc with the configuration file of the shell that you are using.

3. Install packages globally

npm install -g packagename 
like image 33
Flimm Avatar answered Sep 28 '22 00:09

Flimm