错误:EACCES:权限被拒绝,mkdir '/usr/local/lib/node_modules/node-sass/build'

60
我正在尝试运行一个Angular应用程序。我执行ng serve命令,但它显示:

Error: 找不到模块“node-sass”


请使用npm版本5.2.0。更多详情请访问https://dev59.com/31YM5IYBdhLWcg3w-Dtf#52982654。 - Paras Agarwal
请按照以下步骤解决问题:https://dev59.com/31YM5IYBdhLWcg3w-Dtf#52982654 - Paras Agarwal
12个回答

147

解决方案:

您需要更改文件夹node_modules的所有权,因为您使用了sudo npm install -g node-sass命令,所以它的所有权被设置为root。

要将所有权更改为当前用户和组 -

sudo chown -R root:$(whoami) /usr/local/lib/node_modules/

sudo chmod -R 775 /usr/local/lib/node_modules/

永远不要对与npm相关的查询使用sudo命令。


13
第一条命令中没有在用户名前加上 root:,所以对我有用。 - nirmal
2
不要使用第一个命令,而是使用以下命令:sudo chown -R root:YOUR_USERNAME /usr/local/lib/node_modules/ - Jibin Thomas
1
之后我又遇到了一个错误:checkPermissions Missing write access to /usr/local/lib/node_modules 但是这个答案很有帮助 https://dev59.com/T1sX5IYBdhLWcg3wf_v3#40905762 - Alexey Nikonov
8
在Mac OS上:sudo chown -R $(whoami):staff /usr/local/lib/node_modules/ - benek
2
虽然它应该可以工作,但在那里更改权限是一个不好的主意。请参考此答案,以便不需要这样做:https://dev59.com/T1sX5IYBdhLWcg3wf_v3#40905762 - Vincent Gerris
显示剩余2条评论

62

运行此命令

sudo npm install -g <ModuleName> --unsafe-perm=true --allow-root

6
这对我有用。任何解释都会有帮助。 - A_01
1
需要进行解释。例如,什么是想法/要点?它有哪些安全影响?它是如何工作的?为什么它能工作?来自帮助中心“...始终解释你提出的解决方案为什么合适以及它是如何工作的”。请通过编辑(更改)您的答案进行回复,而不是在此处进行评论(不包括“Edit:”,“Update:”或类似内容 - 答案应该看起来像今天写的)。 - Peter Mortensen

28

我在使用Ionic时遇到了这个问题,我通过将一个文件夹向后移动并运行以下命令来解决它:

sudo chmod -R 777 项目目录

之后执行:

npm install node-sass --save


23

试一下这个

sudo npm install -g --unsafe-perm node-sass

或者这个

sudo npm install -g --unsafe-perm --verbose @angular/cli


1
我有一台机器,使用root用户运行npm install仍然失败。只有--unsafe-perm可以正常工作。 - Louis Go

14
这对我有用 -
sudo chown -R `whoami` ~/.npm
sudo chown -R `whoami` /usr/local/lib/node_modules

2
在全新的 M1 Mac 上,这是唯一有效的答案。 - Luke

6
这是由于用户权限导致的。您运行npm install命令的用户可能没有权限,因此会出现错误。
对于该用户,请为该项目文件夹授予权限。 在Mac中,请使用以下步骤为该项目文件夹授予读写权限。
在您的Mac上,选择一个磁盘、文件夹或文件,然后选择菜单文件获取信息。如果共享和权限中的信息不可见,请单击箭头。如果右下角的锁定被锁定,请单击它以解锁获取信息选项,然后输入管理员名称和密码。单击名称列中的用户或组,然后从弹出菜单中选择特权设置。
  • 读取和写入:允许用户打开项目并更改它。

  • 只读:这允许用户打开项目,但不能更改其内容。

  • 仅写入(投递箱):将文件夹变成投递箱。用户可以将项目复制到投递箱中,但无法打开它。只有投递箱的所有者才能打开它。

  • 无访问权限:阻止所有对该项目的访问。

这帮助我解决了问题。


是的,这就是我们想要的答案,不是没有解释并具有未指定安全影响的“尝试这个”或“这对我有用”的答案。 - Peter Mortensen

2

2
在你的终端上运行以下命令:
sudo chown -R $USER /usr/local/lib/node_modules/
sudo chown -R $USER /usr/local/bin/
sudo chown -R $USER /usr/local/share/

1

0
确保您不在主目录或其他位置。 您需要返回到根目录。
使用此命令。
cd ..
cd ~

你当前的位置应该是:

~$

接下来,运行命令以创建项目。


1
为什么 cd .. 会有任何区别? - Peter Mortensen

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