1511

I just installed node and npm through the package on nodejs.org, and whenever I try to search or install something with npm, it throws the following error unless I sudo the command. I have a feeling this is a permissions issue? I am already the admin.

npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/chietala/npm-debug.log
npm ERR! not ok code 0
9

40 Answers 40

2498

This looks like a permissions issue in your home directory. To reclaim ownership of the .npm directory execute:

sudo chown -R $(whoami) ~/.npm
5
  • 120
    I thought that whoami was a placeholder, but it works typed literally as-is, so it must be a variable I don't understand.
    – SimplGy
    Commented May 14, 2013 at 5:18
  • 145
    whoami is an actual shell command en.wikipedia.org/wiki/Whoami. The backticks around whoami ensure that it gets executed correctly and then placed into the chown command
    – Noah
    Commented May 14, 2013 at 15:21
  • This is good, but there's a more complete answer for npm newbies such as myself. Might need to create a new /npm dir & also point npm to use it. See suther's answer below. Commented Jan 9, 2022 at 14:42
  • Using the answer below npm config get prefix showed that I had to do this for ~/.nvm as well.
    – Markus
    Commented Mar 20, 2023 at 14:01
  • Thanks! This command solved a lot of issues in Mac. Commented Jun 15, 2023 at 9:45
748

Permissions you used when installing Node will be required when doing things like writing in your npm directory (npm link, npm install -g, etc.).

You probably ran Node.js installation with root permissions, that's why the global package installation is asking you to be root.


Solution 1: NVM

Don't hack with permissions, install Node.js the right way.

On a development machine, you should not install and run Node.js with root permissions, otherwise things like npm link, npm install -g will need the same permissions.

NVM (Node Version Manager) allows you to install Node.js without root permissions and also allows you to install many versions of Node to play easily with them.. Perfect for development.

  1. Uninstall Node (root permission will probably be required). This might help you.
  2. Then install NVM following instructions on this page.
  3. Install Node via NVM: nvm install node

Now npm link, npm install -g will no longer require you to be root.

Edit: See also https://docs.npmjs.com/getting-started/fixing-npm-permissions


Solution 2: Install packages globally for a given user

Don't hack with permissions, install npm packages globally the right way.

If you are on OSX or Linux, you can create a user dedicated directory for your global package and setup npm and node to know how to find globally installed packages.

Check out this great article for step by step instructions on installing npm modules globally without sudo.

See also: npm's documentation on Fixing npm permissions.

5
  • 47
    Of all the solutions posted the NVM solution here provided the best results for me. Highly recommend using NVM rather than toying with permissions.
    – wenincode
    Commented Jul 23, 2014 at 2:05
  • None of these solutions worked for me.
    – Mr. Panda
    Commented Oct 20, 2021 at 12:20
  • 2
    I installed node from the snap store but I could not run commands like npm install -g. But after trying the NVM solution everything worked smoothly. Thank you very much for your answer.
    – kevininhe
    Commented Oct 26, 2021 at 4:45
  • This article was helpful as well: medium.com/devops-techable/… Commented Aug 4, 2022 at 21:22
  • WARNING Using only npm install node will install the latest (non-LTS) version! To install the LTS (safer) version, use npm install --lts instead.
    – Borjovsky
    Commented Apr 14, 2023 at 17:51
399

Also you will need the write permission in node_modules directory:

sudo chown -R $USER /usr/local/lib/node_modules
3
  • 150
    I don't know why this still gets upvotes. It is a very bad practice to change the ownership of system directories to a particular user! Please see answer below for other solutions (like creating a separate group for node users). Commented May 28, 2014 at 11:06
  • 39
    Whatever you do -- ABSOLUTELY do not run 'sudo chmod -R whoami' on /usr/local/lib or /usr/lib/ you will ruin your sudoers file and you will hate yourself.
    – qodeninja
    Commented Mar 10, 2015 at 1:02
  • i poked around changing permissions on node-only stuff until I got an error about not being able to install a man page... like holy ^%$# I can't change the permissions there as that affects a lot more than just node!
    – Michael
    Commented Jul 20, 2022 at 19:17
137

Changing the owner on "system-global" folders is a hack. On a fresh install, I would configure NPM to use an already writable location for "user-global" programs:

npm config set prefix "${HOME}/npm"

Then make sure you add that folder to your path:

export PATH="${PATH}:${HOME}/npm/bin"

To avoid future issues, do not use sudo npm ... at all.

See @ErikAndreas' answer to NPM modules won't install globally without sudo, and longer step-by-step guide by @sindresorhus with also sets $MANPATH.

2
  • Just to note the actual path for current versions of node should be .npm and .npm/bin Commented May 12, 2022 at 16:27
  • @ChrisRutherford: as you can see the path is configurable, so it can be any accessible path you want. Chose to not use a dot-name in this answer/example, both because ~/.npm would collide with the "broken" directory in the original question, and because using a hidden directory (at least by default on *nix systems) would be harder to debug when you "just want things to work" and get on with your day.
    – Joel Purra
    Commented May 12, 2022 at 18:08
106

Watch OUT!!! Watch OUT!!! Watch OUT!!!

chown or chmod is NOT the solution, because of security-risk.

Instead do this, do:

First check, where npm point to, if you call:

npm config get prefix

If /usr is returned, you can do the following:

mkdir ~/.npm-global
export NPM_CONFIG_PREFIX=~/.npm-global
export PATH=$PATH:~/.npm-global/bin

This create a npm-Directory in your Home-Directory and point npm to it.

To got this changes permanent, you have to add the export-command to your .bashrc:

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=\$PATH:~/.npm-global/bin" >> ~/.bashrc
3
  • 1
    This is the best solution IMO - avoids messing with system dir ownership. INstalling with sudo can also lead to rights issues further down the road (since stuff might end up ownded by root as well...) Commented Jan 9, 2022 at 14:40
  • 1
    So what to do about stuff already installed globally? Especially if some of it is old and other stuff depends on that particular version?
    – Michael
    Commented Jul 20, 2022 at 19:53
  • 2
    Whenever I get hold of a new machine (either physical or virtual), this is amongst my list to to setup. Saw this last at least 4 years back, and it is still relevant. Surprisingly, it is not the Accepted answer yet Commented Mar 20, 2023 at 9:39
59

I encountered this when installing Recess (https://github.com/twitter/recess) to compile my CSS for Bootstrap 3.

When installing recess:

-npm install recess -g
  1. You need to unlock permissions in your home directory, like Noah says:

    sudo chown -R `whoami` ~/.npm
    
  2. You also need write permissions to the node_modules directory, like Xilo says, so if it still isn't working, try:

    sudo chown -R `whoami` /usr/local/lib/node_modules
    
  3. If you are still seeing errors, you may also need to correct /usr/local permissions:

    sudo chown -R `whoami` /usr/local
    

Please note that as indicated in this post /usr/local/ isn't actually a system dir if you are on a Mac, so, this answer is actually perfectly "safe" for Mac users. However, if you are on Linux, see Christopher Will's answer below for a multi-user friendly, system dir safe (but more complex) solution.

2
  • 41
    This is a bad idea. You probably do not want system directories to be owned by a particular user. Beside serious security concerns this is also not multiuser compatible. Commented Jan 9, 2014 at 11:10
  • 1
    It terrifies me that this has so many upvotes. Changing ownership of /usr/local is permanent system damage by definition, and can only be undone with a full OS install. It is a MASSIVE security issue, and has the potential to make some systems unbootable. This answer is as good as being a virus. I'm sorry, but I have to flag this for deletion. Commented May 7, 2023 at 16:24
40

Other answers are suggesting to change ownerships or permissions of system directories to a specific user. I highly disadvise from doing so, this can become very awkward and might mess up the entire system!

Here is a more generic and safer approach that supports multi-user as well.

Create a new group for node-users and add the required users to this group. Then set the ownership of node-dependant files/directories to this group.

# Create new group
sudo groupadd nodegrp 

# Add user to group (logname is a variable and gets replaced by the currently logged in user)
sudo usermod -a -G nodegrp `logname`

# Instant access to group without re-login
newgrp nodegrp

# Check group - nodegrp should be listed as well now
groups

# Change group of node_modules, node, npm to new group 
sudo chgrp -R nodegrp /usr/lib/node_modules/
sudo chgrp nodegrp /usr/bin/node
sudo chgrp nodegrp /usr/bin/npm

# (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.)

Now you can easily install your modules as user

npm install -g generator-angular

Some modules (grunt, bower, yo etc.) will still need to be installed as root. This is because they create symlinks in /user/bin/.

Edit

3 years later I'd recommend to use Node Version Manager. It safes you a lot of time and trouble.

2
  • 3
    If node is installed by sources, although multiuser would be a problem, all modules would work perfectly without the use of sudo. This is also very important because in the case of the yeoman module, people can't update generators through sudoing the yeoman application as it doesn't allow sudo execution :(
    – HeberLZ
    Commented May 8, 2014 at 4:23
  • 1
    On Linux, I typically use the built-in staff group to give permissions to my dev folders. Also, it's a good idea to run chmod g+ws node_modules to make sure that your group has read/write permission. Commented Jul 20, 2015 at 22:09
32

The official documentation on how to fix npm install permissions with an EACCES error is located at https://docs.npmjs.com/getting-started/fixing-npm-permissions.

I encountered this problem after a fresh install of node using the .pkg installer on OSX. There are some great answers here, but I didn't see a link to npmjs.com yet.

Option 1: Change the permission to npm's default directory

  1. Find the path to npm's directory:

    npm config get prefix
    

For many systems, this will be /usr/local.

WARNING: If the displayed path is just /usr, switch to Option 2.

  1. Change the owner of npm's directories to the name of the current user (your username!):

    sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
    

    This changes the permissions of the sub-folders used by npm and some other tools (lib/node_modules, bin, and share).

Option 2: Change npm's default directory to another directory

There are times when you do not want to change ownership of the default directory that npm uses (i.e. /usr) as this could cause some problems, for example if you are sharing the system with other users.

Instead, you can configure npm to use a different directory altogether. In our case, this will be a hidden directory in our home folder.

  1. Make a directory for global installations:

    mkdir ~/.npm-global
    
  2. Configure npm to use the new directory path:

    npm config set prefix '~/.npm-global'
    
  3. Open or create a ~/.profile file and add this line:

    export PATH=~/.npm-global/bin:$PATH
    
  4. Back on the command line, update your system variables:

    source ~/.profile
    
5
  • 2
    Thanks, this one worked for me as the chown soludion did not. You saved me.
    – fmquaglia
    Commented Feb 4, 2016 at 13:00
  • 1
    I love this answer's option 2. (1) It doesn't have the security vulnerabilities of using sudo, (2) it preserves architecture for other users, (3) it references the documentation, AND (4) it has the needed command line entries included. Thank you for adding!
    – Tom Rose
    Commented Jan 15, 2019 at 14:16
  • So what happens when you install something that's symlinked into /usr/bin/? Now only your user can access it. You log in as someone else, still no access, since the files are actually in another user's home directory!
    – Frans
    Commented Jan 25, 2019 at 16:25
  • Hi @hoppykamper - on step 3, how do you "create a profile file"? Thank you!
    – econobro
    Commented Jan 2, 2023 at 22:33
  • @econobro depends on your shell and OS. Sometimes you should use .bashrc, others .bash_profile, or .profile. Can't answer you what's your case. However, to create the file, simply type touch ~/.profile. (~ correspond to your user's directory under /home). Commented Nov 25, 2023 at 16:49
20

I ran into this issue, and while it's true that ~/.npm should be owned by your user, npm was not installing the modules there.

What actually solved my issue is these commands:

npm config set prefix ~/.npm
export PATH="$PATH:$HOME/.npm/bin"

It will make sure that all your global installation will go under this prefix. And it's important that your user owns this directory.

3
  • 4
    I had to do the same thing on Ubuntu 20.04.
    – Stonecraft
    Commented Jan 1, 2021 at 13:23
  • 1
    This helped on WSL with Ubuntu 20.04. Thanks!
    – dvdblk
    Commented May 12, 2021 at 20:17
  • This saved me so much pain. Thanks!
    – Mysterio
    Commented Oct 11, 2023 at 19:47
12

As if we need more answers here, but anyway..

Sindre Sorus has a guide Install npm packages globally without sudo on OS X and Linux outlining how to cleanly install without messing with permissions:

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

Checkout the source of this guide for the latest updates.

2
  • 2
    tx for the edit @AndyHayden :) My preferred method is suggested in comments above: use NVM! stackoverflow.com/a/24404451/1480391
    – ptim
    Commented Feb 25, 2015 at 4:41
  • The only solution that worked for me that doesn't involve mucking about with permissions. I hate NPM and its idiotic permissions stupidity. Thanks for the solution!
    – RyanNerd
    Commented Feb 1, 2018 at 18:22
10

TL;DR

always use sudo -i or sudo -H when running npm install to install global packages.


When you use npm, it downloads packages to your user home directory. When you run as sudo, npm installs files to the same directory, but now they are owned by root.

So this is what happens to absolutely every single person who has ever used npm:

  • install some local packages without issue using npm install foo
  • install global package using sudo install -g foo-cli without issue
  • attempt to install local package with npm install bar
  • get frustrated at the npm designers now that you have to go chmod a directory again

When you use the -i or -H option with sudo, your home directory will be root's home directory. Any global installs will cache packages to /root/.npm instead of root-owned files at /home/me/.npm.

Just always use sudo -i or sudo -H when running npm install to install global packages and your npm permissions problems will melt away.

For good.

-- q.v. the accepted answer for fixing an already messed up npm.

2
  • best and simple fix Commented Dec 9, 2018 at 16:47
  • FYI, Last link is seems to now be broken.
    – studgeek
    Commented Oct 17, 2021 at 16:57
7

When you run npm install -g somepackage, you may get an EACCES error asking you to run the command again as root/Administrator. It's a permissions issue.

It's easy to fix, open your terminal (Applications > Utilities > Terminal)

sudo chown -R $USER /usr/local/lib/node_modules

** I strongly recommend you to not use the package management with sudo (sudo npm -g install something), because you can get some issues later **

Reference: http://foohack.com/2010/08/intro-to-npm/

7
  • Yay! this one did it to me! after doing the other other ones above: sudo chown -R `whoami` ~/.npm, sudo chown -R `whoami` /usr/local/lib and Commented Dec 6, 2013 at 21:05
  • 8
    This can cause permissions problems with lots of other apps, so I'd suggest not doing this. Why trade one can of worms for another?
    – Brad Parks
    Commented Jun 5, 2014 at 13:34
  • 1
    Or at least refine it to /usr/local/lib/node_modules.
    – Ken
    Commented Jun 11, 2014 at 18:31
  • This, this and more this. After banging my head against a wall, this did the trick. +1
    – dashard
    Commented Mar 21, 2015 at 5:52
  • This was my issue. On a new macbook (os x 10.10.3), permissions on /usr/local/lib/node_modules were: $ ll /usr/local/lib/node_modules total 0 drwxr-xr-x 3 24561 wheel 102B Mar 31 18:19 . drwxrwxr-x 4 24561 admin 136B Mar 31 18:19 .. drwxr-xr-x 26 65534 staff 884B Apr 13 10:53 npm
    – tkane2000
    Commented Apr 17, 2015 at 0:53
6

I had a similar problem at NPM modules won't install globally without sudo, the issue was that when i installed node i did it with sudo via chris/lea ppa repo.

My solution was to uninstall node and then install it this way:

Download latest stable node sources from nodejs.org #in my case node-v0.10.20.tar.gz

tar -zxf node-v0.10.20.tar.gz #uncompress sources

cd node-v0.10.20 #enter uncompressed folder

sudo chown $USER -R /usr/local

./configure --prefix=/usr/local && make && make install

PD: If you don't want to change ownership of the /usr/local folder, you can install it somewhere you already own. The problem of this approach is that you will have to bind the installation folder with the bash command line so that we can use the node command later on

mkdir ~/opt

./configure --prefix=~/opt && make && make install

echo 'export PATH=~/opt/bin:${PATH}' >> ~/.bashrc #or ~/.profile or ~/.bash_profile or ~/.zshenv depending on the current Operative System

With either of those approaches, you will be able to do the following without using sudo

npm install -g module_to_install

1
  • 1
    I ended up using this method. Did use sudo chown $USER /use/local before building. Looks good so far, time to try to build atom! Thanks!
    – prasanthv
    Commented May 7, 2014 at 3:32
6

For me, execute only

sudo chown -R $(whoami) ~/.npm

doesn't work. Then, I execute too

sudo chown -R $(whoami) /usr/lib/node_modules/
sudo chown -R $(whoami) /usr/bin/node
sudo chown -R $(whoami) /usr/bin/npm

And all works fine!

2
  • You are very awesome sir :)
    – user805981
    Commented Mar 11, 2015 at 2:26
  • Files in /usr/lib are system files and should not be owned by your personal user account.
    – rich remer
    Commented Oct 4, 2018 at 21:59
5

For Mac (adopted from Christoper Will's answer)

Mac OS X 10.9.4

  1. System Preference > Users & Groups > (unlock) > press + :

    New Account > "Group"
    Account Name : nodegrp

    After creating the group, tick the user to be included in this group

  2. sudo chgrp -R nodegrp /usr/local/lib/node_modules/
    sudo chgrp nodegrp /usr/bin/node
    sudo chgrp nodegrp /usr/bin/npm
    sudo chown -R $(whoami):nodegrp ~/.npm

4
  • 1
    I had to change a couple of the paths to /usr/local/bin but other than that this solution worked great on my OX X 10.9 machine - thanks !
    – splig
    Commented Oct 27, 2014 at 20:31
  • Bad practice to change ownership of system directories.
    – rich remer
    Commented Dec 17, 2018 at 20:04
  • @richremer I think it depends on what you trying to achieve. if the folder is originally only accessible by the sudoer then it can be only be changed in this way. we limit the change to the folder related to npm. Would it be more safe to keep do sudo or change those folder group ownership so that it can be modified by normal user? If normal user is not supposed to perform any action on this folder then of course should not change the group ownership of the folder.
    – ken
    Commented Sep 5, 2019 at 10:51
  • The appropriate thing to do is install global packages with sudo, but do it with the -H flag. Specifically, sudo -H npm install -g <pkg>. This ensures proper delineation of permissions for system and user folders. What you don't want to do is use sudo npm install -g, because this installs root-owned files to your user directory. It would be great if npm were smart enough to do this the right way, but it's not, so you have to use the -H sudo flag to properly install globally.
    – rich remer
    Commented Nov 13, 2019 at 19:27
5

ISSUE: You (the user) don't have the right set of permissions for the directory.

The instant way out is to run the npm install using sudo, but this may give you the same error, or improper installation.

AND changing directory ownership is not a good option, a temporary patch.


Solution/Suggestion: Change npm's Default Directory (from official docs)

Back-up your computer before moving forward.

(optional) In case you have a erroneous installation, first uninstall it:

npm uninstall <package-name>  # use sudo if you used it while installation
npm cache verify  # or, npm cache clean for npm version below 5.x.x 
  1. Make a directory for global installations:

    mkdir ~/.npm-global

  2. Configure npm to use the new directory path:

    npm config set prefix '~/.npm-global'

  3. Open or create a ~/.profile or ~/.bash_profile file and add this line:

    export PATH=~/.npm-global/bin:$PATH

  4. Back on the command line, update your system variables, or restart the terminal:

    source ~/.profile

  5. (optional) Test: Download a package globally without using sudo.

    npm install -g jshint

0
4

In my case,it's because of the permission of ~/tmp.So I do:

sudo chown -R $USER ~/tmp

And it's OK!

4

Problem: You do not have permission to write to the directories that npm uses to store global packages and commands.

Solution: Allow permission for npm.

Open a terminal:

command + spacebar then type 'terminal'

Enter this command:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
  • Note: this will require your password.

This solution allows permission to ONLY the directories needed, keeping the other directories nice and safe.

3
  • 2
    Downvoting because setting user ownership of system folders is an anti-pattern and this does not account for that. In the special case that npm config get prefix returns something in the home folder, this solution will fix the permissions, but doesn't address the underlying problem of installing global packages in a safe way for a shared environment.
    – rich remer
    Commented Dec 17, 2018 at 19:57
  • This will rewrite the permissions of a huge portion of the operating system. Running this in Ubuntu for example will result in "sudo" command itself becoming unusable. Commented May 18, 2020 at 22:00
  • changing sudo permission is a big NO!!
    – Dipu
    Commented Aug 23, 2020 at 12:00
2

Another great fix here to configure NPM properly, run the following commands :

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH
2

Best solution would be this which is provided by npm documentation.


For Ubuntu suggested solution is Option#2

Brief steps:
Make a directory for global installations:
mkdir ~/.npm-global

Configure npm to use the new directory path:
npm config set prefix '~/.npm-global'
npm config get prefix can help you to verify if prefix was updated or not. The result would be <Your Home Directory>/.npm-global

Open or create a ~/.profile file and add this line:
export PATH=~/.npm-global/bin:$PATH

Back on the command line, update your system variables:
source ~/.profile

Instead of steps 2-4 you can also use the corresponding ENV variable (e.g. if you don't want to modify ~/.profile):

NPM_CONFIG_PREFIX=~/.npm-global


For Mac suggested solution is Option#3

On Mac OS you can avoid this problem altogether by using the Homebrew package manager

brew install node

1
2

In case sudo chown -R $(whoami) ~/.npm didn't work for you, or you need a non terminal command solution.

The issue is that your user account does not have write permission to node_modules folder, so you can do the following

  1. Open finder and press cmd + shift + g this will open go to folder with url

  2. Write the following path /usr/local/lib/node_modules and press go

  3. Right click on node_modules folder and choose Get Info

  4. Scroll down to sharing & permissions section

  5. Unlock to be able to make changes.

  6. Press + and add your user account

  7. Make sure that you choose Read & Write in privilege drop down

Now you should be able to install packages without sudo and permission issues should be solved

2

Nobody mentioned this, but there is actually no need to mess up with permissions or a separate npm installation, just specifying a different cache folder to the command will fix the issue

npm install --cache .npm
npm run build --cache .npm

This will create a local .npm folder

2

simply try

npm rebuild

then after completion run your usual command

1

This is how I solved the issue on Windows 8.1:

  • Go to your nodejs install (usually C:\Program Files\nodejs)
  • Right click node_modules folder and go to properties
  • Click the Security tab and advanced
  • At the top you will see "Owner: SYSTEM", click change
  • Enter the user you want permissions for and click Ok
  • Check the box at the bottom of the advanced settings "Replace all child object permission entries with inheritable permission entries from this object" and click ok
  • Do whatever npm install/update you need
0
1

you could try this, works on ubuntu and mac

sudo chown -R $(whoami) /usr/local/lib/node_modules
1
  • 1
    I ran this and worked 100% for me on a mac: sudo chown -R $(whoami) /usr/local/lib/node_modules
    – leeroya
    Commented Aug 20, 2018 at 19:45
1

use below command while installing packages

 sudo npm install --unsafe-perm=true --allow-root
1
1

When trying to install packages globally as root, the process will fail with EUIDLOOKUP or EACCES or npm will mess up your user global packages permissions.

To understand the problem I would suggest reading this issue. In short npm tries to use the EUID of current process to run installation scripts not as root but as the original user running npm while at the same time assuming that a user running as root would use sudo so EUID will be set.

That's why answer of @JHM16 based on using sudo should work.

But this is not the case when installing packages inside a container build. In containers sudo will be more often than not missing. And build will usually just run as root.

Of course container build can be changed to run these commands as a regular user and build everything as that user. This will not make the build more secure though and could be undesirable in some situations.

So in a container build, here's how you can make npm global install work for example with the yarn package.

# setpriv --ruid 0 --euid 0 npm --unsafe-perm install -g yarn

setpriv is a small low level utility that should be available or easily installable on any linux distro.

0

Actually, I was also having the same problem. I was running Ubuntu. Mine problem arises because I'd lost my public key of the Ubuntu. Even updating my system was not happening. It was giving GPG error. In that case, you can regain your key by using this command:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>

After that npm works fine!

0

John Papa points to the history and reasoning behind this issue and gives a solid fix:

John Papa's steps are to:

  1. Use brew to install node without npm
  2. Update your .bash_profile/.bashrc to let npm and node know where to install and find packages
  3. Use brew to update node and npm to update itself

Hope this helps the curious!

0

@Yves M.'s answer was very similar to my solution. Here are the commands I used, which were slightly different from his.

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

Then query for the latest version:

nvm ls-remote

Then install the newest version:

nvm install YOUR_VERSION_HERE

example

nvm install v5.8.0

Not the answer you're looking for? Browse other questions tagged or ask your own question.