如何修复 npm 抛出无需 sudo 的错误

1498

我刚刚通过nodejs.org上的包安装了Node和NPM,但每当我尝试使用npm搜索或安装某些东西时,它都会抛出以下错误,除非我用sudo命令。我觉得这可能是一个权限问题?我已经是管理员了。

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

42
请考虑使用 NVM(而不是劫持权限)来解决问题,参见:https://dev59.com/rmQo5IYBdhLWcg3wUd-L#24404451 - Yves M.
2
@janaspage 你不能通过NPM(Node包管理器)安装node或NVM(Node版本管理器),这是不合理的。NPM与node一起提供(它们同时安装)。请查看维基百科页面:http://en.wikipedia.org/wiki/Npm_(software) - Yves M.
6
终于有比“sudo chown”更好的解决方案了:https://github.com/sindresorhus/guides/blob/master/npm-global-without-sudo.md - Dmitri Zaitsev
在OSX上,使用官方的pkg安装程序安装node时,这个解决方案不起作用。我使用了这个:https://dev59.com/rmQo5IYBdhLWcg3wUd-L#34968008 - fmquaglia
3
它解释了问题和解决方法:https://docs.npmjs.com/getting-started/fixing-npm-permissions - n00b
显示剩余4条评论
39个回答

0

我通过将所有者从root更改为我的用户名来解决了这个问题

sudo chown -R 我的用户名:我的用户名 /home/我的用户名/.config/configstore/

将“我的用户名”替换为您的用户名和组。


0

我喜欢使用Ubuntu的组来实现这一点,而不是更改所有者,这很简单。

  1. 首先使用apt-get安装nodejs和npm

    sudo apt-get update && sudo apt-get install nodejs npm

  2. 找出谁登录了,即用户名,运行以下命令在终端中查看:

    whoami

  3. 您可以使用一个非常简单的命令查看分配给您的组的列表,通常第一组就是您的用户名本身

    groups

  4. 运行以下命令允许已登录用户访问:

    sudo chmod 777 -R /usr/local && sudo chgrp $(whoami) -R /usr/local

  5. 更新npm和nodejs

    npm install -g npm

完成了,您的用户可以在无需sudo的情况下运行npm命令

您还可以参考此链接 https://askubuntu.com/a/1115373/687804


0

John Papa指出了这个问题的历史和原因,并提供了一个可靠的解决方案

John Papa的步骤如下:

  1. 使用brew安装不带npm的node
  2. 更新您的.bash_profile/.bashrc文件,让npm和node知道在哪里安装和查找软件包
  3. 使用brew更新node和npm以更新自身

希望这能帮助好奇的人们!


0

我尝试了所有在评论中提到的方法,但都没有成功,但是以下命令对我起了魔法:

hash -r

-1

这是我使用并且有效的解决方案。我尝试过使用whoami,但没有成功。

然后执行以下命令:

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

接着执行以下命令:

sudo chown -R $USER /usr/local/bin/npm

最后执行以下命令:

sudo chown -R $USER /usr/local/bin/node


-2

-3

将系统目录的所有权设置为个人用户帐户是不好的做法。 - rich remer

-4

以上全部都不是必要的。

我遇到的问题是在运行NPM时我使用了-g。我无法弄清楚为什么在我的项目中没有创建'npm_module'文件夹。

解决方案是运行“NPM init”以创建“package.json”和“npm_module”文件夹,所有后续模块都将加载到其中。运行npm时不要使用-g,而是使用-s来更新您的“package.json”文件。

这里有一个很好的视频解释


这个视频需要付费订阅。你能否简要概括一下它的内容,并指向一个免费资源?我猜你是指“npm”,而不是“NPM”。 - nealmcb
这个回答与原帖问题无关,并包含一个仅限订阅服务的链接。如果你发现了某个问题的解决方案在StackOverflow上没有相应的问题,那么这是一个很好的机会去创建你自己的问题和答案。 - Tyler Hoppe

-7
sudo chown -R `whoami` /usr/local/lib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接