Install Global Node Modules without Sudo

If you’re on Linux or macOS and have tried installing a node module globally, you might run into permission issues like the following:

Screenshot showing invalid permissions on Linux when installing an NPM package globally

By default, Node installs global modules to your bin directory: /usr/bin/node_modules which may require elevated privileges to access. Instead, you could tell Node to install these modules in your home directory. This way you don’t need to use sudo since you already own the directory. In this case, we’ll be installing all global npm modules to ~/.npm-global

Steps to follow

  1. Create a new directory in your home folder
mkdir ~/.npm-global
  1. Tell npm to use the newly created directory to install global modules
npm config set prefix ~/.npm-global
  1. Add this to your ~/.profile or ~/.bash_profile depending on whether you’re on Linux/macOS respectively
 export PATH=~/.npm-global/bin:$PATH
  1. Update your current terminal session by reloading the profile
source ~/.profile
  1. Try and install a sample module globally and it should work
npm install -g @vue/cli

Screenshot showing valid permissions on Linux when installing an NPM package globally

And you’re done! Of course, you could skip all this and just use sudo, but it’s not recommended and highly discouraged. Do things the right way and get the basics right.

References