错误:EACCES:权限被拒绝,访问'/ usr/local/lib/node_modules'做出反应

hen*_*edi 183 install node.js npm reactjs

可能导致错误的原因是Error: EACCES: permission denied, access '/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!   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! A complete log of this run can be found in:
npm ERR!     /Users/macbookmd101/.npm/_logs/2018-02-21T16_26_08_421Z-debug.log
Run Code Online (Sandbox Code Playgroud)

oka*_*das 300

更改您的文件权限..像这样

首先检查谁拥有该目录

ls -la /usr/local/lib/node_modules
Run Code Online (Sandbox Code Playgroud)

它拒绝访问,因为node_module文件夹归root所有

drwxr-xr-x   3 root    wheel  102 Jun 24 23:24 node_modules
Run Code Online (Sandbox Code Playgroud)

所以这需要通过将root更改为您的用户来更改,但首先运行以下命令以检查当前用户 如何通过OS X中的命令行获取活动用户的名称?

id -un
Run Code Online (Sandbox Code Playgroud)

然后改变所有者

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules
Run Code Online (Sandbox Code Playgroud)

  • 这很有用,但是当我运行命令更改所有者时,我得到了“非法组名”。所以我将命令更改为`sudo chown -R ownerName:/ usr / local / lib / node_modules`并且它可以工作。 (37认同)
  • 在某些情况下,在命令中添加 sudo 也不起作用。这对我有用,应该被接受。 (7认同)
  • 文档中建议使用 nvm 安装 npm,而不是更改权限。请参阅/sf/answers/4170268651/ (3认同)
  • 尽管那是正确的答案,但我已经多次遇到此问题,更好的解决方案是使用nvm。这样,您将不需要使用`chown`更改文件所有者。https://github.com/nvm-sh/nvm (2认同)
  • **停止** 做 /sf/answers/3869245131/ 而不是搞乱 `/usr/local/lib/node_modules` 的权限 (2认同)

Ada*_*dam 27

您可以通过 Node 版本管理器或 Node 安装程序安装 npm。在文档中它指出:

我们不建议使用 Node 安装程序,因为 Node 安装过程会将 npm 安装在具有本地权限的目录中,并且在全局运行 npm 包时可能会导致权限错误。

NPM 实际上推荐使用节点版本管理器来避免这些错误。

由于您有权限错误,您可能通过 Node 安装程序安装了 npm,现在您需要使用 nvm(节点版本管理器)重新安装它。

幸运的是,这非常简单。您甚至不需要删除当前版本的 npm 或 Node.js。

你需要做的就是

  1. 安装nvm。对于 OSX 或 Linux 节点使用:

     curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
    
    Run Code Online (Sandbox Code Playgroud)

这会在您的主目录中创建一个 nvm 文件夹。

然后

  1. 通过 nvm 安装 npm 和 node.js。为此,只需致电

     nvm install node 
    
    Run Code Online (Sandbox Code Playgroud)

(“节点”是最新版本的别名)

现在你可以在全球范围安装你的包,而无需使用sudo或改变的所有者node_modulesusr文件夹中。

  • 这是我见过的最简单、最干净的答案。它可以避免弄乱文件夹权限或强制使用“sudo”。我认为这应该是公认的答案。谢谢! (5认同)

Nav*_*aju 25

为了最大程度地减少权限错误的可能性,您可以将npm配置为使用其他目录。在此示例中,您将在主目录中创建并使用一个隐藏目录。

备份您的计算机。在命令行的主目录中,创建用于全局安装的目录: mkdir ~/.npm-global 配置npm以使用新的目录路径: npm config set prefix '~/.npm-global' 在首选的文本编辑器中,打开或创建~/.profile文件并添加以下行: export PATH=~/.npm-global/bin:$PATH 在命令行中,更新系统变量:源~/.profile 要测试新配置,请在不使用sudo的情况下全局安装软件包

  • 我认为这是破坏力最小的选择。[在npm网站中也推荐](https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally#manually-change-npms-default-directory)。 (11认同)
  • 如果您使用“zsh”,则可以使用“~/.zshrc”而不是“~/.profile” (5认同)
  • 这就是我们正在寻找的东西!谢谢。 (3认同)
  • 要创建“.profile”,请输入“touch .profile”。然后要在 mac 中打开它,请输入“open .profile”。`source ~/.profile` 本身就是一个命令。 (3认同)
  • 或者,如果您不想执行“npm config set prefix”(特别是如果您正在编写非root安装程序),您可能需要覆盖“PREFIX”环境变量或提供“--prefix”选项,两者都相当于“npm config set prefix”。(不确定哪个覆盖哪个) (2认同)
  • 这对我来说非常有效。在我看来,这个答案使破坏性错误的空间最小,并且非常容易理解和实现。 (2认同)
  • 这实际上是推荐的解决方案,也是从长远来看最好的解决方案。 (2认同)

小智 20

您需要做的就是将USER添加到/ local / lib的所有者中

sudo chown -R $USER /usr/local/lib
Run Code Online (Sandbox Code Playgroud)

  • 准确地说,这不是“添加”所有者。这是*改变***所有者,这比仅仅*添加*更具破坏性,几乎与`sudo chmod -R 777 /`一样具有破坏性。 (9认同)
  • 这个命令破坏了我所有的权限。需要再次恢复所有的东西。 (7认同)
  • 如果以后的读者不理解权限,请参考NPM官方文档并正确解决此问题。https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-global。具体来说,未来的读者可能应该**使用节点版本管理器重新安装npm(推荐)** (5认同)
  • 这根本不是一个好的解决方案。通过在`chown`之上运行,您很有可能破坏整个文件系统的权限结构。 (2认同)

小智 19

尝试在尝试任何命令之前附加sudo.

像这样:sudo npm install

在Linux/UNIX中使用带有命令的sudo通常会将您的权限提升到超级用户级别.在Windows中,超级用户帐户通常称为"管理员".在Linux/Unix中,超级用户帐户通常被命名为"root".

root用户有权访问,修改或删除计算机上的几乎任何文件.普通用户帐户可以访问,修改或删除更少的文件.对普通帐户的限制可保护您的计算机免受未授权或有害程序或用户的侵害.某些进程要求您对通常无权访问的文件或文件夹执行操作.安装每个人都可以访问的程序就是这些操作之一.

在您的情况下,使用sudo运行安装命令会为您提供超级用户的权限,并允许您修改普通用户无权修改的文件.

  • 避免在安装npm软件包时使用sudo.你越往后走这条路越深,以后修复它就越难.只需将权限更改为npm文件夹,如另一个答案所示,过上更好的生活. (44认同)
  • 那可能行得通,但是随着时间的推移,它将导致连续的问题。如果您不想得到各种拒绝权限的错误,请避免这种情况。像拒绝npm缓存文件夹,拒绝安装等等。 (2认同)

cin*_*i19 11

ubuntu中安装全局包时,在写入usr/bin文件夹时需要特殊的写入权限.这是出于安全原因.因此,每次安装全局包时,请使用:

sudo npm install -g [package-name]
Run Code Online (Sandbox Code Playgroud)

对于您的具体情况,它将是:

sudo npm install -g typescript
Run Code Online (Sandbox Code Playgroud)


Tri*_*ing 9

如果在授予权限后仍然无法正常工作,请尝试运行以下命令:

mkdir ~/.npm-global

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

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

source ~/.profile
Run Code Online (Sandbox Code Playgroud)

最后用这个命令测试

npm install -g jshint

这不适用于 Windows。


Ahm*_*tab 9

仔细回顾一下:

https://ionicframework.com/docs/developing/tips#resolving-permission-errors

sudo chown -R $(whoami) /usr/local/{lib/node_modules,bin,share}
sudo chown -R $(whoami) ~/.npm ~/.npmrc
Run Code Online (Sandbox Code Playgroud)


Fur*_*uan 8

我正在尝试安装react expo,除了sudo我不得不添加--unsafe-perm

像这样。这解决了我的问题

sudo npm install -g expo-cli --unsafe-perm
Run Code Online (Sandbox Code Playgroud)


小智 8

CentOS 8流中遇到

解决方案

(1/4) 创建node_modules文件夹

$ sudo mkdir /usr/local/lib/node_modules

(2/4) 当前用户拥有

$ sudo chown -R $USER /usr/local/lib/node_modules/

(3/4) 拥有bin文件夹

$ sudo chown -R $USER /usr/local/bin/

(4/4) 拥有share文件夹

$ sudo chown -R $USER /usr/local/share/


Suh*_*vad 7

看来您遇到权限问题。如果要安装,npm-packagesEACCES尝试全局安装软件包时可能会出现错误。这意味着您无权写入npm用于存储全局软件包和命令的目录。

尝试运行命令:sudo chmod u+x -R 775 ~/.npmsudo chown $USER -R ~/.npm或者你可以运行任何npm与命令sudo,应该得到解决您的问题。

如果要在npm-package本地安装,则应位于本地项目目录中,并可以尝试运行sudo npm install <pkg-name>命令来安装所需的软件包。使用的目的sudo是它将更改您的所有者权限,以便您可以授权当前用户运行npm命令。

我建议您看看https://docs.npmjs.com/getting-started/fixing-npm-permissions


Nim*_*rma 7

使用以下命令以sudo用户身份安装npm

sudo npm install -g create-react-app 
Run Code Online (Sandbox Code Playgroud)

而不是 npm install -g create-react-a pp。


ang*_*era 7

小心更改/ usr / local下所有目录所有者的所有响应 基本上,不要弄乱linux系统!!!

我认为最好的方法是使用您自己的文件夹找到所有全局软件包:https : //www.competa.com/blog/how-to-run-npm-without-sudo/


adn*_*ved 6

如果您在Mac上遇到此问题。跟着这些步骤

首先使用以下命令检查谁是此文件的所有者

  ls -la /usr/local/lib/node_modules
Run Code Online (Sandbox Code Playgroud)

您会在下面找到一些文件,其中一个在下面

drwxr-xr-x 3根轮768 5月29日02:21 node_modules

您是否注意到上面的文件是根用户拥有的,要在其中进行更改,因为您需要更改路径的所有者。

您可以通过此命令使用检查谁是当前用户

  id -un                    (in my case user is yamsol)
Run Code Online (Sandbox Code Playgroud)

然后您可以通过调用此命令进行更改(只需用ownerName替换您的用户名)

  sudo chown -R ownerName: /usr/local/lib/node_modules
Run Code Online (Sandbox Code Playgroud)

在我的情况下,您知道用户是“ yamsol”,我将以这种方式调用此命令

  sudo chown -R yamsol: /usr/local/lib/node_modules
Run Code Online (Sandbox Code Playgroud)

而已。


ber*_*gle 6

对于 nvm 用户

sudo chown -R $USER /home/bereket/.nvm/versions/node/v8.9.1/lib/node_modules 
Run Code Online (Sandbox Code Playgroud)

sudo chown -R $USER /usr/local/lib/node_modules/
Run Code Online (Sandbox Code Playgroud)

替换v8.9.1为您正在使用的节点版本。


Vip*_*oni 6

在我的 Mac 上安装 Ionic 时出现类似的问题。

sudo chown -R $USER /usr/local/我运行您可以按照错误中给出的方式更新的命令 路径。


iva*_*ncz 5

似乎您尝试全局安装 npm 包而不是本地安装,如下man npm install所述:

-g 或 --global参数将导致 npm 全局安装包而不是本地安装

一般来说,当您设置 npm 项目(以及您可能拥有的许多其他项目)时,在 Node.js 全局模块 (/usr/local/lib/node_modules) 上安装包并不是一个好主意,因为您的调试日志建议。

-g不要使用,而是使用--save,它会自动将包保存为package.json文件的依赖项:

像这样:

$ npm install express-generator --save

$ cat package.json 
{
  "name": "first_app_generator",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
},
  "author": "ivanleoncz",
  "license": "MIT",
  "dependencies": {
    "express-generator": "^4.16.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

但正如其他答案提到的,如果您要使用,则在执行时-g必须使用sudo如果您的用户具有 sudo 权限:请参阅 /etc/sudoersnpm install express-generator -g ) ,但实际上,这不是一个好主意,可能会导致权限问题。

注意

有使用选项安装的说明express-generator-g以便使脚本express-cli.js在系统路径上可用,但您也可以使用本地安装的脚本,该脚本位于node_modules您的 npm 项目中:

$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp
Run Code Online (Sandbox Code Playgroud)

如果显示类似/usr/bin/env: 'node': No such file or directory 的消息,请安装nodejs-legacy(Debian/Ubuntu)

恕我直言,如果您不确定后果,使用-g(也使用sudo)就像hic sunt dracones 。

了解更多信息:


pos*_*sha 5

我能够在 mac 中使用以下内容解决该问题。

sudo npm install -g @aws-amplify/cli --unsafe-perm=true
Run Code Online (Sandbox Code Playgroud)


Que*_*tin 5

我尝试了@okanda给出的答案的解决方案,但对我而言不起作用。

但是,当我为该线程中提到的几个文件夹执行此操作时,它工作得很好:https : //github.com/angular/angular-cli/issues/9676#issuecomment-464857493

sudo chown -R $USER /usr/local/lib/node_modules/
sudo chown -R $USER /usr/local/bin/
sudo chown -R $USER /usr/local/share/
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这个答案对我有帮助。乌班图18.04.3 (2认同)

Ayo*_*Ayo 5

这是因为npm无法在node_modules本地访问您的全局目录,运行

sudo chown -R Name: /usr/local/lib/node_modules
Run Code Online (Sandbox Code Playgroud)

例如

sudo chown -R developerayo: /usr/local/lib/node_modules
Run Code Online (Sandbox Code Playgroud)

修复了问题,现在您可以再次运行您运行的命令。


dPa*_*Pac 5

对于那些在使用上述解决方案后仍然无法解决问题的人。尝试这个

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

这应该可以解决问题,干杯!


小智 5

100%是工作

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


小智 5

下面的命令对我有用:

sudo npm install -g appium --unsafe-perm=true --allow-root
Run Code Online (Sandbox Code Playgroud)