是什么原因导致错误:EACCES:权限被拒绝,访问'/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

当前回答

尝试在您尝试的任何命令之前添加sudo。

像这样:sudo NPM install

在Linux/UNIX中,将sudo与命令一起使用通常会将权限提升到超级用户级别。在Windows系统中,超级用户帐户通常被称为“Administrator”。在Linux/Unix中,超级用户帐户通常命名为“root”。

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

在本例中,使用sudo运行安装命令可以为您提供超级用户的权限,并允许您修改普通用户没有权限修改的文件。

其他回答

类似于POsha的答案,但这是我在ubuntu 19上工作的方法

sudo npm i -g ngrok --unsafe-perm=true --allow-root

从这个链接

https://github.com/inconshreveable/ngrok/issues/429

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

首先检查谁拥有这个目录

ls -la /usr/local/lib/node_modules

它拒绝访问,因为node_module文件夹属于root用户

drwxr-xr-x   3 root    wheel  102 Jun 24 23:24 node_modules

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

id -un或者whoami

然后换主人

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules

OR

sudo chown -R ownerName: /usr/local/lib/node_modules

OR

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

似乎你试图在全局而不是本地安装npm包,正如man npm install所描述的:

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

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

不要使用-g,而是使用——save,它会自动将包保存为包的依赖项。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"
  }
}

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

请注意

这里有关于使用-g选项安装express-generator的说明,为了让express-cli.js脚本在系统路径上可用,但是你也可以使用本地安装的脚本,如果你的npm项目位于node_modules:

$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp

如果出现类似/usr/bin/env: ' node ': No这样的文件或目录,安装nodejs-legacy (Debian/Ubuntu)

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

欲知更多信息:

创建NPM包(NPM init) Express.js发电机

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

我们不建议使用Node安装程序,因为Node 安装过程将NPM安装在一个带有local的目录中 在运行NPM包时,可能会导致权限错误 在全球范围内。

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

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

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

你所需要做的就是

安装nvm。 OSX或Linux Node使用: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/<VERSION>/install.sh | bash .sh

<VERSION>应该替换为最新版本

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

Then

通过nvm安装npm和node.js。要这样做,只需打电话 NVM安装节点

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

现在你可以全局安装你的包,而不需要使用sudo或改变usr文件夹中node_modules的所有者。

对于linux / ubuntu如果命令

NPM install -g <package_name>

npm WARN deprecated superagent@4.1.0: Please note that v5.0.1+ of superagent removes User-Agent header by default, therefore you may need to add it yourself (e.g. GitHub blocks requests without a User-Agent header).  This notice will go away with v5.0.2+ once it is released.

npm ERR! path ../lib/node_modules/<package_name>/bin/..

npm ERR! code EACCES

npm ERR! errno -13

npm ERR! syscall symlink

npm ERR! Error: EACCES: permission denied, symlink '../lib/node_modules
/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!  { [Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>']

npm ERR!   cause:
npm ERR!    { Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!      errno: -13,

npm ERR!      code: 'EACCES',

npm ERR!      syscall: 'symlink',

npm ERR!      path: '../lib/node_modules/<package_name>/bin/..',
npm ERR!      dest: '/usr/local/bin/ionic' },

npm ERR!   stack:
npm ERR!    'Error: EACCES: permission denied, symlink \'../lib/node_modules/ionic/bin/ionic\' -> \'/usr/local/bin/ionic\'',

npm ERR!   errno: -13,

npm ERR!   code: 'EACCES',

npm ERR!   syscall: 'symlink',

npm ERR!   path: '../lib/node_modules/<package-name>/bin/<package-name>',

npm ERR!   dest: '/usr/local/bin/<package-name>' }

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!     /home/User/.npm/_logs/2019-07-29T01_20_10_566Z-debug.log

修复:安装与根权限

Sudo NPM install <package_name> -g