安装ESLint时使用npm出现错误:EACCES:权限被拒绝

84
我正在尝试使用npm安装ESLint,方法如下:
npm install -g eslint

但是我遇到了以下错误:

Deans-Air:~ deangibson$ npm install -g eslint
npm ERR! tar.unpack untar error /Users/deangibson/.npm/eslint/2.4.0/package.tgz
npm ERR! Darwin 15.3.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "eslint"
npm ERR! node v4.2.3
npm ERR! npm  v2.14.7
npm ERR! path /usr/local/lib/node_modules/eslint
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir

npm ERR! Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/eslint'
npm ERR!     at Error (native)
npm ERR!  { [Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/eslint']
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/usr/local/lib/node_modules/eslint',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/eslint',
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!     /Users/deangibson/npm-debug.log

说实话,每次我试图使用npm安装东西时都会遇到这个问题。有时使用“sudo”可以解决问题,有时则不行... 我该如何一劳永逸地解决这个问题?

12个回答

146

请使用以下命令在安装npm时加上--unsafe-perm=true--allow-root标志:

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

它对我来说像魔法一样起作用。


如果是本地包,显然不要使用 g。这可能会对结果产生很大影响。 - maudulus
1
这个在macos上可以运行。也许不太安全,但这是唯一对我有效的解决方案。 - loretoparisi
实际上使用它并不不安全,因为全局安装npm模块需要使用sudo,原因是它会在根目录中创建文件。 - DHRUV GUPTA
仅使用sudo并不能解决我的问题,我还必须使用-i标志。 - Akshay

53

这个问题在npm文档:修复npm权限中有详细记录。

你有两种解决方案可供选择:

选项1:将npm的默认目录更改为您主文件夹中的隐藏目录。

mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH=~/.npm-global/bin:$PATH
source ~/.profile

选项2: 使用一个包管理器来帮你处理这个问题。

brew install node

3
如果你选择选项一,可能会遇到这个问题,所以我完全不建议这样做:https://askubuntu.com/questions/452860/usr-bin-sudo-must-be-owned-by-uid-0-and-have-the-setuid-bit-set#471503 根用户应该拥有/user/bin。 - Joe Eifert
2
选项4:使用Yarn安装,命令为sudo yarn global add <package-name> - Andre
4
不要使用选项1,它会破坏您的sudo。 - Germán Barletta
@GermánBarletta 我使用了选项1,我该如何修复它,请帮忙? - Shivansh Singh
哎呀,很抱歉听到这个消息 @ShivanshSingh,我按照Joe分享的链接上的建议进行了操作。别担心,这很容易解决。https://askubuntu.com/questions/452860/usr-bin-sudo-must-be-owned-by-uid-0-and-have-the-setuid-bit-set#471503 - Germán Barletta
显示剩余5条评论

11

运行以下命令解决了我在安装packages.json时遇到的问题:

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

只安装导致问题的软件包:

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

5

大家好,我通过简单的方式已经修复了它,方法是:

sudo npm install

我尝试了最顶部的答案,它也很好用。


3
sudo npm install -g --unsafe-perm=true eslint

足够了。

3

在使用 tns 命令之前,请先使用 sudo,这对我有效。

例如:

sudo tns create Tekmo --template tns-template-hello-world

如果我使用了sudo,那么在创建postinstall.js时会出现未找到错误。

错误:EACCES:权限被拒绝


2

针对MacOS用户遇到的问题!

在启动React服务器时,请输入sudo npm start而不是npm start

这对我解决了问题。


这对我有用,谢谢你。 - Abdul

1

你可以使用sudo su登录root用户。首先在终端上运行sudo su命令,然后输入你的登录密码。最后执行你期望的命令npm install -g eslint。这对我很有效。


0
我有同样的问题,我刚刚将我的Node版本更新到16.x(之前是14.18),问题就解决了。

0

针对MAC用户,提供对项目目录文件夹的访问权限:

  1. 右键单击项目目录文件夹
  2. 选择“获取信息”
  3. 提供访问权限 - 应用于包含的项目

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