npm安装不起作用。显示需要检查权限?

19

我现在正在尝试在我的机器上安装eslint,但它说我需要检查权限,因为它缺少对/user/local/lib/node_modules的写访问权限。有人知道如何解决这个问题吗?谢谢!

npm install -g eslint
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:
npm ERR!    "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 ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator (though this is not recommended).

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/mkaplan/.npm/_logs/2019-03-03T18_05_46_487Z-debug.log


5
你试过用“sudo npm install -g eslint”吗? - Abid Nawaz
11个回答

45

请尝试运行sudo npm install -g eslint


4
谢谢,这很有效!应该猜到只需要使用sudo命令。 - Matthew Kaplan
你是传奇。谢谢! - fypnlp
这将允许您安装eslint,但如果npm已正确安装,则不需要sudo。 (在此处运行sudo可能是安全风险,正如下面一些人所指出的那样。) - matthewscottgordon
这只是一个临时解决方案,而不是解决方法。你很可能是你的机器管理员,并且可能错误地将node和npm安装为root用户,现在它拥有与npm相关的所有内容。只需卸载npm并永远不要使用sudo来安装它。 - yrk

3

Linux用户使用sudo npm install,Windows用户以管理员身份运行PowerShell并进入项目目录,然后运行npm install


3
在我的情况下,我遇到了安装angular的同样问题,所以只需将命令更改为:
$ sudo npm install -g @angular/cli

1

这可以解决问题:

sudo npm install -g npm

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

1

我对Node还比较陌生,但作为长期使用Linux的用户,我不确定通过sudo安装node包是否是一个好主意。

我想eslint应该没问题,但如果你在全局安装('-g')一个包时遇到这个问题,那么我猜你在安装每个包时都会遇到同样的问题。这意味着每次你从npm全局安装一个包时,都要以root权限下载不知道什么安装脚本,并在你的计算机上运行它。

无论如何,正如我所说,我不是Node专家,但我也遇到了同样的问题,我的问题是我使用apt安装了“nodejs”包。如果你也这样做了,那么我建议:

  1. 使用sudo apt remove nodejs删除nodejs。(根据你使用的Linux发行版可能略有不同,我正在运行Ubuntu。)
  2. 按照NPM文档建议安装 nvm 或其他Node版本管理器。

当我这么做时,我能够在不用sudo的情况下全局安装NPM包。

(是的,我告诉你不要以root权限运行npm来安装东西,然后又说你应该以root权限运行apt来安装东西。但你肯定需要以root权限运行apt,而且我知道apt开发人员和Ubuntu软件包仓库管理人员采取了适当的预防措施。我不确定以root权限运行npm是否错了,但我也不确定它是否正确,我能够通过上述步骤避免以root身份运行npm。)


1
这种情况发生在你一开始使用sudo运行npm命令时。所以不要这样做?
如果出现这种情况,这意味着有人以root的身份搞乱了npm。然后root在全局npm缓存中创建文件,拒绝访问除root之外的任何内容。
这就是为什么在运行npm install或npm install -g时会触发EACCES错误。
你不应该与node_modules有关的任何事情,也不应该使用sudo运行npm [anything]。你明白吗?你正在给予问题包执行任何想做的操作的权限。即使你检查包并确保它的安全性,那么它下载的依赖关系呢?你也会检查吗?
npm注册表每周会有30b次下载,他们的恶意软件控制远远不够。
你正在将整个系统文件树的访问权限交给问题包的文件。即使npm本身也会提醒你不建议这样做。你不知道包在后台做什么。如果你安装了我开发的一个包,但我是一个喜欢让人生活更艰难的坏人……这是一个安全问题。
以上故事除外。如果你使用sudo,这将强制你从那时起以sudo身份运行某些npm命令,进一步混乱。
在这种情况下,你最多可以作为root为node_modules授权给whoami访问权限。
最好的解决方案是要么正确设置,以便你不必使用sudo,要么在容器中运行应用程序,这样你所做的任何事情都是在容器内执行的,至少不会影响你的本地机器。即使在那里,也不建议以root身份搞乱,权限变得如此混乱……调试起来真是一场灾难。

0
这可能发生在你只是为了让它工作而“sudo”一切或者强制安装依赖项时,你不应该搞乱node模块的根文件夹。 现在你可以尝试使用以下命令进行安装:
sudo npm install -g eslint

0
我在安装truffle时遇到了问题,出现了以下错误: npm ERR!操作被您的操作系统拒绝。 npm ERR!很可能您当前的用户没有访问此文件的权限。
我通过添加'sudo'来解决这个问题。 解决方法: sudo npm i -g truffle

0

首先尝试运行 sudo npm install -g gatsby-cli,然后运行 npm start


0

使用以下命令:

sudo npm install -g eslint

使用sudo命令,您将获得安装权限。


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