错误:EACCES:权限被拒绝

224

我运行npm install lodash,但它抛出Error: EACCES: permission denied的错误。我知道这是一个权限问题,但据我所知,安装本地节点模块不需要sudo权限。如果我使用sudo运行它,则会在~/node_modules文件夹中安装。现有文件夹的文件权限为drwxrwxr-x。我无法弄清楚可能出了什么问题。

以下是错误信息。

npm ERR! tar.unpack untar error /home/rupesh/.npm/lodash/4.13.1/package.tgz
npm ERR! Linux 3.13.0-88-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "lodash"
npm ERR! node v4.3.1
npm ERR! npm  v2.14.12
npm ERR! path /home/rupesh/node_modules/lodash
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir

npm ERR! Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash'
npm ERR!     at Error (native)
npm ERR!  { [Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash']
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:35:25',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:47:53',
npm ERR!      'FSReqWrap.oncomplete (fs.js:82:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/rupesh/Desktop/es6/npm-debug.log

2
文件夹 node_modules 的所有者是根用户吗? - AJS
在我打算安装 lodash 的文件夹中尚未创建 node_module 文件夹。 - xruptronics
你在 /home/rupesh/ 目录下还是其他目录下运行了 npm install 命令? - AJS
我运行npm install的文件夹路径是~/Desktop/es6。 - xruptronics
请确保你是 es6 目录的所有者,然后执行命令 ls -l ~/Desktop | grep es6,看一下输出结果是什么。 - AJS
drwxrwxrwx 3 rupesh rupesh 4096年7月12日14:48 ES6 - xruptronics
29个回答

145

这个命令可以解决问题。对我起了作用:

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

1
对于像我这样的人,尽管在撰写时该命令似乎已经起作用了,但是在 Node v10.10.0 上,我收到了以下错误提示:"npm ERR! Can't install /var/www/project: Missing package name"。 - Wayne Smallman
1
使用 node v10.15.0 作为 root 用户安装现有应用程序时,标志 --unsafe-perm=true --allow-root 对我们起了作用,其中 node-sass 无法安装。 我们使用的确切命令以将 node-sass 安装到本地目录 node_modules 文件夹中为

npm install --save-dev --unsafe-perm=true --allow-root node-sass@latest

- Peter Edwards
1
我能够使用这些标志使其正常工作,所以真正的答案是:sudo npm install -g --unsafe-perm=true --allow-root <package-name>@<version-name>。 - Frank H
这个对我有用:sudo npm install --save -g solgraph --unsafe-perm=true --allow-root - William
2
错误 ```js ~ $ npm install -g --unsafe-perm=true --allow-root npm ERR! 无法读取未定义的属性(正在读取“name”)npm ERR!此运行的完整日志可在以下位置找到: npm ERR!/data/data/com.termux/files/home/.npm/_logs/2022-10-09T09_45_11_327Z-debug-0.log ``` - coco bar
显示剩余2条评论

79

我在全局安装Webpack服务器时遇到了同样的问题,使用这里提供的步骤解决了我的问题,也许对你有用。

上述步骤如下:

在计算机上创建一个全局安装目录:

1. mkdir ~/.npm-global

配置npm以使用新的目录路径:

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

打开或创建一个~/.profile文件并添加此行:

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

回到命令行界面,更新您的系统变量:

4. source ~/.profile

测试:下载一个包而无需使用sudo进行全局安装。

npm install -g jshint

可以使用相应的 ENV 变量(例如,如果您不想修改“~/.profile”),而不是执行第2至4个步骤:

NPM_CONFIG_PREFIX=~/.npm-global

1
在 Mojave 上工作。非常感谢。经过4-5个小时的疑难解答,这招起了作用! - Johnny
在Catalina上,执行source ~/.zshrc命令。 - Radoslaw
这在我的Ubuntu 18.04上有效。感谢帮助。 - devaent
在 Mac M1 Big Sur 上工作过。谢谢! - Entropy
1
根据文档(URL)所述,最好的方法是“使用节点版本管理器重新安装npm”。我尝试了这个方法,问题得到了解决。 - Ramin Firooz

43

我在Linux上遇到了问题。我写了:

chown -R myUserName /home/myusername/myfolder

在我的项目文件夹中。

注意:不是解决问题的正确方法,如果您不确定可能会产生什么后果,请不要运行它


25
非常不推荐。这会触及所有您的目录并在其中任何一个上删除根权限。如果某些东西需要设置为根用户,这将破坏您当前的配置。 - Patrick Da Silva
3
我同意 @PatrickDaSilva。这搞砸了我整个服务器... - Simon Degn
最好使用绝对路径,例如 chown -R myusername /home/myusername/myfolder,而不是 ./*。如果您在根目录中运行答案中的命令,它会将一切都搞砸! - raphael75
1
无论如何,在我的情况下这是正确的解决方案。由于某种原因,Webpack输出文件夹的所有者是root,所以现在它又归我所有了,并且它可以正常工作。我同意你不应该随意这样做,但如果你浏览你的文件夹并且像“这个root是什么鬼?”那么就对那个文件夹执行此操作。 - ThaJay
3
@PatrickDaSilva 没有任何损害将用户自己家目录中的文件的所有权更改为他们自己的用户。实际上,通常这就是您想要的:chown -R $USER ~ / - ekerner

31
尝试使用以下命令为您的项目文件夹授予所有权限。
sudo chmod -R 777 /yourProjectDirectoryName

跑步与

sudo npm install lodash

1
这是一个初级解决方案。 - Pablo Papalardo
2
你甚至可能不需要777。对我来说,问题只是#的权限太低了。(改为775就解决了。) - Andrew
8
将文件或目录的权限设置为777意味着所有用户都可以读取、写入和执行它,但这可能会带来巨大的安全风险。- https://linuxize.com/post/what-does-chmod-777-mean/ - MillerC
1
运行得非常顺利! - Anurag Shukla

19

使用 npm init 创建 package.json 解决了我的问题。


但我不确定为什么在安装Node模块时需要package.json文件,因为在我的情况下,我没有使用--save或--save-dev或类似的命令,所以package.json文件没有被更新或使用。 - xruptronics
这很奇怪。我觉得你的npm配置出了点问题,而执行init命令重置了它,不管怎样,这个问题应该永远是个谜,因为我在其他地方找不到类似问题的参考资料。 - AJS
我也遇到了npm 6.9.0的类似问题,这个方法对我也起作用了。 - Chris Marotta
如果使用create-react-app等工具自动生成package.json文件,该如何操作? - stuckoverflow
但是如果我们在npm init过程中遇到问题呢?错误:EACCES:权限被拒绝,打开'/var/www/html/wp-content/themes/mytheme/package.json - user1207289

17
sudo chown -R $(whoami) /usr/local/bin

将当前用户设为 /usr/local/bin 文件夹的所有者。该文件夹的权限是问题所在。


1
这对我来说是工作,我像这样更改了我的应用程序文件夹路径 sudo chown -R $(whoami) /myAppPath 谢谢 - Nail Khaled Beneloualid
2
不要误会,但这听起来像是个坏主意。你的常规用户账户不应该是/usr/local/bin的所有者,它应该由超级用户账户拥有。 - Brian Reading
这对我有用。我已经更改了我的路径为$ sudo chown -R $(whoami)/usr/local/lib/node_modules/。 - Mahadevan Annamalai

16

它没有对其他人(r-x)的写权限。请尝试:

chmod a+w <folder>

并重复。


2
chown 没有 -r 选项,可以避免在 node_modules 中的每个文件夹上使用它吗? - DrakaSAN
1
@Juanjo Salvador,它没有起作用。它抛出了相同的错误。 - xruptronics
@DrakaSAN 是的,chown 有一个递归选项。 - Juanjo Salvador
这将导致一个Git问题。所有文件都将被标记为已修改。 - zzzgoo

15

相关问题:

浪费了数小时,分布在几天之内。

在AWS EC2机器上,以下内容有效:

sudo chown -R $(whoami) /home/ubuntu/.cache
sudo chown -R $(whoami) /home/ubuntu/.config
sudo chown -R $(whoami) /home/ubuntu/.local
sudo chown -R $(whoami) /home/ubuntu/.npm
sudo chown -R $(whoami) /home/ubuntu/.pm2

希望对您有所帮助。


2
感谢@Manohar Reddy Poreddy,尝试了很多解决方案后,这个对我有用。 - csharpbd

13

这个解决了我的问题 - mac Mojave 10.14.6 - PhpStorm。

未处理的拒绝错误:EACCES:权限被拒绝,mkdir '/Users/myname/.npm/_cacache/index-v5/fb/5a'

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

原始帖子: https://dev59.com/m1UL5IYBdhLWcg3wOl9x#50639828

这是一个有关IT技术的问题。

9

LUBUNTU 19.10 / 运行相同问题:$ npm start

错误信息: Error: EACCES:权限被拒绝,打开 '/home/simon/xxx/pagebuilder/resources/scripts/registration/node_modules/.cache/@babel/register/.babel.7.4.0.development.json' at Object.fs.openSync (fs.js:646:18) at Object.fs.writeFileSync (fs.js:1299:33) at save (/home/simon/xxx/pagebuilder/resources/scripts/registration/node_modules/@babel/register/lib/cache.js:52:15) at _combinedTickCallback (internal/process/next_tick.js:132:7) at process._tickCallback (internal/process/next_tick.js:181:9) at Function.Module.runMain (module.js:696:11) at Object. (/home/simon/xxxx/pagebuilder/resources/scripts/registration/node_modules/@babel/node/lib/_babel-node.js:234:23) at Module._compile (module.js:653:30) at Object.Module._extensions..js (module.js:664:10) at Module.load (module.js:566:32)

看起来我的默认用户(管理员)没有node-module目录的权限。

这个方法解决了我的问题!

$ sudo chmod a+w node_modules -R ## 在项目根目录运行


也适用于20.04版本。 - Shams Nahid

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