安装npm包时出现“错误:EACCES:权限被拒绝,mkdir”。

5
每次我尝试使用npm(在这种情况下是electron-packager)安装某些东西时,我都会遇到这个错误。我该如何解决这个问题?
我已经尝试通过更改.npm的权限来让我获得访问权限,但它没有起作用。我还尝试了使用另一个node版本(通过nvm安装:node -v 12.1.0; npm -v 6.9.0),但同样不起作用。
$ npm install electron-packager --save-dev
npm ERR! path /Users/felixmoser/.npm/_cacache/index-v5/15/a0
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir
npm ERR! Error: EACCES: permission denied, mkdir '/Users/felixmoser/.npm/_cacache/index-v5/15/a0'
npm ERR!  [OperationalError: EACCES: permission denied, mkdir '/Users/felixmoser/.npm/_cacache/index-v5/15/a0'] {
npm ERR!   cause: [Error: EACCES: permission denied, mkdir '/Users/felixmoser/.npm/_cacache/index-v5/15/a0'] {
npm ERR!     errno: -13,
npm ERR!     code: 'EACCES',
npm ERR!     syscall: 'mkdir',
npm ERR!     path: '/Users/felixmoser/.npm/_cacache/index-v5/15/a0'
npm ERR!   },
npm ERR!   isOperational: true,
npm ERR!   stack: 'Error: EACCES: permission denied, mkdir ' +
npm ERR!     "'/Users/felixmoser/.npm/_cacache/index-v5/15/a0'",
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/Users/felixmoser/.npm/_cacache/index-v5/15/a0',
npm ERR!   parent: 'electron-packager'
npm ERR! }
npm ERR! 
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR! 
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator (though this is not recommended).

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/felixmoser/.npm/_logs/2019-05-01T14_11_08_530Z-debug.log

我其实不知道还有什么尝试的方法,希望你们能够帮我解决这个问题!


你改变了node/npm的版本吗? - Muhammad Ali
6个回答

17

更改.npm文件夹的所有权, 在我的情况下,我找不到解决方案,所以我使用了...

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

1
比较好 - $(whoami) - Srinivas Reddy Thatiparthy

8

只需将~/.npm文件夹的所有者更改为您自己即可:

sudo chown -R felixmoser ~/.npm

您需要输入密码才能调用sudo命令。


1
谢谢你的解决方案,它起作用了。我的错误是在用户名后添加了“:”,但没有指定组。 - Felix Moser

2
尝试使用 --global-g 安装包时,也会遇到类似的权限问题。虽然这不是您当前的问题,但我想在此处添加它,因为搜索全局安装时出现 EACCESS 错误的人也可能会找到这个问题。

有些人更改系统文件夹权限,允许非根用户在系统文件夹中写入,但以下是文档建议的方法:

https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally/

备份计算机(包括在此处提及的原因是因为文档也提到了它,但对我来说过于谨慎)

然后执行:

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

编辑你的~/.profile文件:

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

然后使用以下命令调用它:

source ~/.profile

为了测试您的新配置,请全局安装软件包而不使用sudo命令:
npm install -g jshint

或者,可以使用相应的 ENV 变量而不是修改 ~/.profile(但为了使其永久生效,您仍需要修改配置文件)。

NPM_CONFIG_PREFIX=~/.npm-global

这感觉像是正确的方法,而且它也起作用。 - Jake

0
我遇到了这个问题,而且所有的解决方案都不起作用,直到我意识到……我忘记先运行 npm init。没有一个 package.json 文件,npm 安装任何东西都不会起作用。

-2

只需添加 sudo 所以,将 npm install electron-packager --save-dev 改为 sudo npm install electron-packager --save-dev


不建议使用sudo运行npm!在授予权限时一定要非常精确。推荐之前的答案! - Felix Moser

-3
请考虑至少在用户的位置内运行指令,例如:

/home/myuser/

express HelloWorld --view=pug


1
他正在用户文件夹中使用它,但npm安装程序尝试写入不同文件夹的访问权限。 - Anton Krug
1
欢迎来到Stackoverflow Roberto :) 正如Anton已经发布的,这不是这种情况。无论从哪里运行它都没有关系。显然,npm曾经以sudo身份运行过,因此.npm文件夹不属于正在运行它的用户。因此,唯一可行的选项是(并避免每次使用sudo运行,这是不好的做法)将.npm文件夹的所有者更改回执行npm的用户。感谢您的贡献。不要被downvotes打击。它们只是标记较差的答案与最佳答案相比。发表更多答案!你会成功的 :) - Worp

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