npm在安装Angular CLI时抛出EACCES错误

26

我无法通过npm在macOS上全局安装Angular Cli。每次运行npm install -g @angular/cli时都会出现以下错误:

npm ERR! node v6.9.2
npm ERR! npm  v3.10.9
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!     at Error (native)
npm ERR!  { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!     at Error (native)
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules' }
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!     /Users/apple/npm-debug.log

1
您正在尝试全局安装一个模块,为此需要使用更高的权限,在root用户身份下执行 npm install -g angular-cli 命令即可,也可以使用 sudo npm install -g angular-cli 命令。 - mic4ael
1
对于那些遇到相同错误的人,以及复制了一个包含 .node 文件夹的 repo 的人!在安装之前删除 .node 文件夹! - Diana
我已删除节点模块文件夹并尝试了npm安装,它成功了。谢谢Diana。 - Srikanth Reddy
12个回答

36
当你在任何平台上使用npm install -g并得到EACCES错误时,说明你正在写入一个你没有写入权限的目录。有些人会建议使用sudo,但这样做会导致未来出现更多问题。 npm文档提供了解决此问题的选项。我强烈推荐使用类似nodenv的节点版本管理器作为解决方案。

2
这是个很好的答案。按照npm文档链接中提供的步骤,我成功解决了问题。(我先移除了一个现有的节点,然后根据建议通过nvm重新安装它) - user10719814

23

试着使用这个方法: 在命令行中,在您的主目录下,创建一个用于全局安装的目录:

mkdir ~/.npm-global

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

npm config set prefix '~/.npm-global'
在您喜欢的文本编辑器中打开或创建一个 ~/.profile 文件,并添加此行:
export PATH=~/.npm-global/bin:$PATH
在命令行中,更新您的系统变量:
source ~/.profile

测试在不使用sudo的情况下全局安装包。现在运行npm install -g @angular/cli,它应该可以工作。


第三步是要“打开或创建一个~/.profile文件”-您能解释一下如何完成这个步骤吗? - Kyle Vassella
这将创建一个空的配置文件:touch ~/.profile - intotecho

7
  1. 创建全局安装目录:

    mkdir ~/.npm-global

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

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

  3. 创建 ~/.profile 文件

  4. 在新的 ~/.profile 文件中添加以下行:

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

  5. 更新系统变量:

    source ~/.profile

参考文献:解决全局安装软件包时的 EACCES 权限错误


6

警告:请通过输入echo $(npm config get prefix)检查$(npm config get prefix)是否指向/usr

我是这样解决的

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

对我有用。

1
谢天谢地。其他修复方法都没有帮助我,所以我猜必须改变整个usr/local目录的所有权。不管怎样,你太棒了! - Joel Balmer
2
那真是个糟糕的主意。你不应该改变/bin /share的所有权。 - Tarick Welling
这个程序毁了我的系统(无法再使用sudo或su),不要使用它!!为了恢复,我不得不登录到恢复Shell并发出“sudo chown -R root /usr/{lib/node_modules,bin,share}”命令。 - ciri

3

我通过运行

sudo npm install -g @angular/cli

解决了这个问题。

输入密码后即可安装。


1
我在Linux上遇到了这个问题,仓库位于一个被挂载了noexec选项的分区上。重新挂载带有exec选项的分区解决了我的问题。
我通过nvm安装了node,这是避免权限问题的推荐方法。但是如果nvm不能在您的文件夹中执行,它在某些情况下将无法工作。

1

0

使用:

sudo npm install -g @angular/cli

然后它会工作,我的也没有工作,但是使用sudo后就可以了。


0
Ayush的回答是我最初尝试的方法。然而问题仍然存在。也许我没有正确执行所有步骤,我不确定。所以我又在Google上搜索,并找到了这个链接https://github.com/angular/angular-cli/issues/7735#issuecomment-345546822。有两种解决方法。幸运的是,第一种方法适用于我。可能与Ayush在答案中提到的相比,可能会有所不同的步骤:
$ echo -e "export PATH=$(npm prefix -g)/bin:$PATH" >> ~/.bashrc 
$ source ~/.bashrc

虽然我正在使用Ubuntu!不管怎样,现在问题已经解决了。:)


-1

EACCES:权限被拒绝,符号链接'../lib/nod code example'

sudo npm install -g nodemon //最简单的解决方法

示例2:npm ERR!错误:EACCES:权限被拒绝,符号链接'../lib/node_modules/@angular/cli/bin/ng' -> '/usr/bin/ng' sudo npm install -g @angular/cli sudo chown -R $USER /usr/local/lib/node_modules


1
请格式化您的答案并澄清,因为文本混在一起,不清楚这是否是实际答案还是您出现了错误。 - Ruli

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