ChatGPT解决这个技术问题 Extra ChatGPT

错误:EACCES:权限被拒绝,访问“/usr/local/lib/node_modules”

什么可能导致错误 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
有关如何解决此问题,请参阅 NPM 的官方指南:docs.npmjs.com/…

j
j22

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

首先检查谁拥有该目录

ls -la /usr/local/lib/node_modules

它拒绝访问,因为 node_module 文件夹归根用户所有

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

所以这需要通过将 root 更改为您的用户来更改,但首先运行下面的命令以检查您当前的用户 How do I get the name of the active user via the command line in OS X?

id -unwhoami

然后更改所有者

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

或者

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

或者

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

在某些情况下,在命令中添加 sudo 也不起作用。这对我有用,应该被接受。
这很有帮助,但是当我运行命令更改所有者时,我得到了 illegal group name。所以我将命令更改为 sudo chown -R ownerName: /usr/local/lib/node_modules 并且它起作用了。
虽然这是正确的答案,但我多次遇到这个问题,更好的解决方案是使用 nvm。这样您就无需使用 chown 更改文件所有者。 github.com/nvm-sh/nvm
与其更改权限,不如在文档中建议使用 nvm 安装 npm。请参阅stackoverflow.com/a/59575266/2311074
**停止**🛑 做 stackoverflow.com/a/55274930/234110 而不是弄乱 /usr/local/lib/node_modules 的权限
C
Community

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

备份您的计算机。在命令行的主目录中,为全局安装创建一个目录:

mkdir ~/.npm-global

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

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

在您首选的文本编辑器中,打开或创建一个

~/.profile

文件并添加这一行:

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

在命令行上,更新您的系统变量:

source ~/.profile

要测试您的新配置,请在不使用 sudo 的情况下全局安装包


在我看来,这是破坏性最小的选择。它也是recommended in the npm website
或者,如果您不想执行 npm config set prefix(尤其是在编写非 root 安装程序时),您可能需要覆盖 PREFIX env var 或提供 --prefix 选项,两者都等效到 npm config set prefix。 (不确定哪个覆盖哪个)
这对我来说非常有效。在我看来,这个答案使破坏性错误的空间最小,并且非常易于理解和实施。
这就是正在寻找的东西!谢谢。
这实际上是推荐的解决方案,也是长期最好的解决方案。
N
Nicolas

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

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

编辑 :

要精确定位 node_modules 文件夹,请在使用前一个命令之前尝试使用此命令:

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

如果以后的读者不理解权限,那么请参考官方文档 NPM 文档并正确修复问题。 docs.npmjs.com/…。具体来说,未来的读者可能应该使用节点版本管理器重新安装 npm(推荐)
这很简单。这也意味着你再也不用担心 lib 中的任何事情了;你拥有/usr/local/lib。
这根本不是一个好的解决方案。通过在 chown 之上运行,您很有可能破坏整个文件系统的权限结构。
这个命令破坏了我的所有权限。需要再次恢复所有的东西。
准确地说,这不是添加所有者。这是改变 所有者,这比仅仅添加 更具破坏性,并且几乎与sudo chmod -R 777 / 一样具有破坏性。
Q
Quentin

我尝试了@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/

谢谢,这个答案对我有帮助。 Ubuntu 18.04.3
我以前也有其他解决方案,但由于某种原因,这次需要所有这些解决方案才能工作文件夹。谢谢。 Mac v 10.15.2
在生产服务器中运行是否安全?
我在输出中有:dest: '/usr/local/bin/.npm-uJtxIR1m'。所以我应该 chown /usr/local/bin 因为 .npm.. 似乎是一个动态文件/文件夹?
对我来说,同样的,除了这个决定之外没有任何效果。太感谢了!
P
Pradeep Kumar HK

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

像这样:sudo npm install

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

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

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


在安装 npm 包时避免使用 sudo。你走得越深,以后就越难修复它。只需按照另一个答案中的指示更改对 npm 文件夹的权限,并过上更好的生活。
这可能会奏效,但随着时间的推移会导致持续的问题。如果您不想获得所有类型的权限被拒绝错误,请避免这种情况。比如拒绝 npm 缓存文件夹,拒绝安装等等。
如果用户不了解权限,则应删除此答案,因为在安装软件包之前使用 sudo 会设置一个非常危险的先例。请参阅您更改核心节点位置所有权一次的第一个答案。
或者至少这是标准的错觉......有太多方法可以从多年未修补的用户级别获得root访问权限,因此可以安全地假设任何可以访问您机器的恶意用户都可以轻松获得通过您安装的任何安全性较差的应用程序进行 root 访问。
C
Chuck Le Butt

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

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

NPM 实际上是 recommends using a Node Version Manager 来避免这些错误。

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

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

你需要做的就是

安装非虚拟机。对于 OSX 或 Linux 节点,请使用: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh |重击

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

然后

通过 nvm 安装 npm 和 node.js。为此,只需调用 nvm install node

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

现在您无需使用 sudo 或更改 usr 文件夹中 node_modules 的所有者即可全局安装您的软件包。


感谢亚当的回答!只是想知道稍后在构建/环境设置过程中可能会出现哪些并发症?
还要详细说明,对于 fish 上的人,为了正常工作,nvm 需要一个 fish-wrapper github.com/FabioAntunes/fish-nvm
谢谢!我注意到有一个新的 NVM 次要版本,所以我猜现在命令应该是 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash。此外,我必须关闭并打开终端才能运行 nvm install stable
这是我见过的最简单,最干净的答案。它避免弄乱文件夹权限或通过使用“sudo”来强制它。我认为这应该是公认的答案。谢谢!
当发生与 OP 相同的错误时,这解决了我关于 npm install -g mongodb-realm-cli 的问题。
W
Willi Mentzel

如果您在 Mac 上遇到此问题。按着这些次序

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

ls -la /usr/local/lib/node_modules

你会发现一些像下面这样的文件,其中一个在下面

drwxr-xr-x   3 root    wheel  768 May 29 02:21 node_modules

你有没有注意到上面的文件是由 root 拥有的,因为你需要在里面进行更改,因为你需要更改路径的所有者。

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

id -un (in my case user is yamsol)

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

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

就我而言,您知道用户是“yamsol”,我将以这种方式调用此命令

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

而已。


可以使用 $USER:$USER 来避免查找用户 ID
S
Suhas Gavad

看起来您遇到了权限问题。如果您正在安装 npm-packages,那么您在尝试全局安装软件包时可能会遇到 EACCES 错误。这意味着您无权写入 npm 用于存储全局包和命令的目录。

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

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

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


M
Madhur Bhaiya

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

sudo npm install -g [package-name]

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

sudo npm install -g typescript

a
angelcervera

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

sudo 用于本地内容也是一个非常糟糕的建议

www.competa.com 的原始链接已损坏,因此这是从那里开始的原始方法:

npm config set prefix ~/.npm

# open your .bashrc (Linux) or .bash_profile (Mac) file for editing:
nano ~/.bashrc # for Linux
# or...
nano ~/.bash_profile # for Mac if you haven't created a .bashrc file

# add these lines:
export PATH="$PATH:$HOME/npm/bin"
export NODE_PATH="$NODE_PATH:$HOME/npm/lib/node_modules"

# save the file and then enter this command or logout and login to make the changes take effect:
. ~/.bashrc
# or...
. ~/.bash_profile

选项 B: 使用 NVM 之类的版本管理器


F
Furquan

我试图安装 react expo,除了 sudo 我必须添加 --unsafe-perm

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

sudo npm install -g expo-cli --unsafe-perm

@Furquan,非常感谢……在尝试了不同的解决方案后,它对我有用。
@AzeTech,我很高兴它有所帮助:D
h
helvete

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

mkdir ~/.npm-global

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

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

source ~/.profile

最后用这个命令测试

npm install -g jshint

这不适用于 Windows。


如果您遵循此顺序,则第三行是非永久性的(重新启动后将不起作用),第四行完全不相关并且什么也不做。请查看得分最高的答案以获得正确的解决方案。
A
Ahmed El-Atab

仔细检查:

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

谢谢,这是对我有帮助的一条评论。
P
Paul Bradbury

在 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/


b
bereket gebredingle

对于 nvm 用户

sudo chown -R $USER /home/bereket/.nvm/versions/node/v8.9.1/lib/node_modules 

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

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


这对我不起作用!仍然收到错误:npm ERR!错误:EACCES:权限被拒绝,重命名/home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules/.staging/npm-90fab7c7/node_modules/columnify/node_modules/wcwidth/node_modules/defaults 似乎是/.staging ..那个文件夹在尝试安装后不存在。你能帮我解决这个问题吗?
@Samuel 你运行这个命令了吗? sudo chown -R $USER home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules
S
Shodipo Ayomide

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

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

例如

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

解决了这个问题,现在您可以再次运行您运行的命令。


a
axiqia

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

sudo npm install -g create-react-app 

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


引用@Lukas- 在安装 npm 包时使用 sudo。你走得越深,以后就越难修复它。只需按照另一个答案中的指示更改对 npm 文件夹的权限,并过上更好的生活。
不是一个好主意。我建议反对它。你以这种方式打开另一罐蠕虫。
i
ivanleoncz

好像您试图在全局而不是本地安装 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"
  }
}

但正如其他答案所提到的,如果您要使用 -g,则在执行 {3 },但实际上,这不是一个好主意,可能会导致权限问题。

注意

有使用 -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 such file or directory 出现这样的消息,请安装 nodejs-legacy (Debian/Ubuntu)

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

了解更多信息:

创建 NPM 包 (npm init)

Express.js 生成器


a
aldo.roman.nurena

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

sudo npm install -g @aws-amplify/cli --unsafe-perm=true

警告:--unsafe-perm=true 存在安全风险,允许节点以 root 身份运行
N
Nalbandyan Artur

这是100%的工作

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


d
dpacman

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

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

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


A
Adrian Mole

下面的命令对我有用:

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

Y
Yurii Verbytskyi

只需在这样的命令之前更改所有者或仅使用 sudo

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules更改所有者

或者

sudo npm install -g json-server

而已。


c
calestini

对于 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

修复:使用 root 权限安装

sudo npm install <package_name> -g


我不想用 sudo 安装节点脚本!
F
Fatema Tuz Zuhora

您需要超级用户级别的权限才能安装 React。在 Linux/Unix 中,超级用户帐户通常命名为“root”。

要获得超级用户权限,只需在终端上运行以下命令:

sudo -i

然后简单地运行命令来安装 React:

npm install -g create-react-app

但是,reactjs 团队鼓励我们使用以下命令而不是安装全局包。

npx create-react-app app_name

使用 sudo 是一个冒险的提议,一些包可能是安全的,但其他包可能会开始做其他事情并利用您授予的 root 权限。 sudo 以超级用户身份运行后续命令
create-react-app 这样的一些包需要 root 权限才能安装为全局包;否则,您将无法安装它。但是,reactjs 团队鼓励我们使用以下命令 npx create-react-app app_name 而不是安装全局包。
j
joe cutter

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


J
Jalpesh

类似于 POsha 的答案,但这对我在 ubuntu 19 上有用

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

从这个链接

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


F
Farrukh Ahmed

只需在 npm 命令前添加“sudo”即可。而已。


请不要推荐这个,因为它是一种反模式,并且可能会影响未来的安装
o
ordonezalex

通过安装 nvm,然后将节点设置为最新版本,我能够摆脱这个问题。

使用 curl 安装 nvm(最新版本请访问 nvm.sh)

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

列出可用的节点版本

nvm ls

v10.12.0 默认 -> v10.12 (-> v10.12.0) 节点 -> stable (-> v10.12.0) (默认) stable -> 10.12 (-> v10.12.0) …

选择要使用的节点版本

nvm use v10.12

nvm 与 npm config "prefix" 选项不兼容:当前设置为 ""

运行此命令以取消设置该选项:

nvm use --delete-prefix v10.12.0

执行上述命令后,您将能够在 Ubuntu 中安装 react/angular。


n
nicolas asinovich

只帮助了这个:

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

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅