npm警告:检查权限时缺少对/usr/local/lib/node_modules的写访问权限

48

注意:由于安全问题,请不要使用标记的解决方案,而是使用得票最高的解决方案


原问题:

我正在尝试使用此命令安装Monaca。

npm install -g monaca

但是在遇到这些错误之后:

npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules 
npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!  { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!   stack: 'Error: EACCES: permission denied, access \'/usr/local/lib/node_modules\'',
npm ERR!   errno: -13, npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules' }
任何解决这个问题的想法吗? 谢谢

请查看npm文档中对此的解释 - djvg
7个回答

106
将以下内容添加到安装npm后的~/.bashrc文件中:
npm set prefix ~/.npm
PATH="$HOME/.npm/bin:$PATH"
PATH="./node_modules/.bin:$PATH"

在更改后执行以下代码:

source ~/.bashrc

正如@contemplator所提到的一样,避免使用sudo


4
如果使用Zsh,在安装npm后,请将上述行添加到~/.zshrc文件中。 在更改后执行以下命令:source ~/.zshrc。请注意,不要使用sudo - Corey Coto
7
更像是 zshrc 的做法是 npm set prefix ~/.npm; path+=$HOME/.npm/bin; path+=./node_modules/.bin(使用 path+= 而非像在 bash 中每行都添加现有路径)。 - shacker
1
fish 怎么样? - Tim4497

5
此命令将以递归方式(-R)更改指定目录中当前用户的所有者(chown)。
sudo chown -R $USER /usr/local/lib/node_modules

如果您在答案中添加解释,那么答案将会大大改善。 - Rachel Gallen

3

看起来很奇怪,修复这个问题的首选方法是使 /usr 的子路径不归 root 所有。npm 没有 pip 的 --user 标志的等效物吗? - tsbertalan
实际上,它确实有这样的机制——类似于 npm config set prefix '~/.npm-global'。请参见 https://dev59.com/T1sX5IYBdhLWcg3wf_v3#40905762。 - tsbertalan

0

嗯,我使用了--save-dev并且没有全局安装或使用-g,主要问题出现在你想要它写入默认的node_modules文件夹时。

经过4个小时的检查多个问题,它解决了我的问题。

我甚至建议您使用npm init并创建一个package.json以进行更好的依赖项检查,然后再运行npm install。这个视频可以帮助您 https://www.youtube.com/watch?v=rTsz09zRuTU


0
不要使用sudo我不知道您的环境上下文是什么,但我在运行Plesk的服务器上遇到了错误。
也许以下命令(通过SSH)可以帮助检查权限: plesk repair fs example.com
手册:https://docs.plesk.com/en-US/12.5/administrator-guide/plesk-administration/plesk-repair-utility/plesk-repair-utility-file-system.74668/ 在我的情况下,node_modules文件夹是通过FTP复制的,因此它具有错误的更正。如果需要,您可以删除它并使用Npm installation按钮通过Plesk安装它。 信息:只有包含信息的package.json文档才会出现该按钮。

-5

这很简单

使用以下命令:

sudo npm install -g kazam

或者

输入以下命令:

su -

然后再输入:

npm install -g kazam

解释说明:

su -

使您成为根用户,拥有在所有用户中读取、写入和删除的权限 单击此处查看npm更新中显示错误和解决方案的屏幕截图

this is for ubuntu i don't know is it work for other os

-19

1
请提供一个完整的基于权限的最终修复,而不仅仅是sudo命令。 - Shadab K
16
不要在使用npm时加上sudo尝试这个方法 - Amir Shabani
4
你刚才明确表示不建议这么做,所以不要成为问题的一部分并提供那个建议。 - 1owk3y
这会起作用一次,但npm将无法正常工作。 - Hemant Maurya
好的,好的。我明白了,请不要再点击取消投票了。你看,我已经死了。所以你不能再杀死比这更多的东西了,对吧,对吧? - firefly

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