NPM 不会在 Mac 上安装任何包。新的,干净的构建。 `EACCES` 和其他错误

Posted

技术标签:

【中文标题】NPM 不会在 Mac 上安装任何包。新的,干净的构建。 `EACCES` 和其他错误【英文标题】:NPM won't install any package on Mac. New, clean build. `EACCES` & other errors 【发布时间】:2014-10-05 04:07:29 【问题描述】:

我刚刚从头开始重建我的 Mavericks (Mac OS X 版本 9.4) 机器。我是这台机器的管理员和唯一用户。

我通过他们的git-2.0.1-intel-universal-snow-leopard.pkg (http://git-scm.com/downloads) 在默认的/usr/local/git/bin/git 位置安装了Git。 我通过他们的node-v0.10.30.pkg (http://nodejs.org/download/) 在默认的/usr/local/bin/node 位置安装了Node。 Node 安装程序包的最后一步包含一条注释,说明他们还在默认的/usr/local/bin/npm 位置安装了 NPM。 我的$PATH 回显/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin(它包含/usr/local/bin)。

运行npm install -g bower 会导致:

npm ERR! Error: EACCES, mkdir '/usr/local/lib/node_modules/bower'
npm ERR!   [Error: EACCES, mkdir '/usr/local/lib/node_modules/bower']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/bower',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/bower',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53',
npm ERR!      'Object.oncomplete (fs.js:107:15)' ] 
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 13.3.0
npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "bower"
npm ERR! cwd /Users/Home
npm ERR! node -v v0.10.30
npm ERR! npm -v 1.4.21
npm ERR! path /usr/local/lib/node_modules/bower
npm ERR! fstream_path /usr/local/lib/node_modules/bower
npm ERR! fstream_type Directory
npm ERR! fstream_class DirWriter
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, mkdir '/usr/local/lib/node_modules/bower'
npm ERR! fstream_stack /usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23
npm ERR! fstream_stack /usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/Home/npm-debug.log
npm ERR! not ok code 0

运行类似的安装(npm install -g yonpm install -g gruntnpm install -g nvmnpm install -g npm)会导致出现相同的错误列表。

网上有几个人建议通过sudo 强制安装,但其他几个人警告说这可能会导致以后出现问题。这些包的手册似乎没有提到sudo 的要求,并且在某些情况下,他们建议在出现此问题时联系 NPM。

运行npm cache clear 并不能解决问题。

在主 (~) 目录中运行 ls -la 会显示我的 Mac OS X 用户名是我的 .npm 目录的所有者:drwxr-xr-x 15 admin staff 510 Aug 11 23:53 .npm

有谁知道出了什么问题以及如何纠正这个问题?谢谢你。

【问题讨论】:

这就是答案***.com/questions/18212175/… 【参考方案1】:

除非绝对必要,否则一般不建议运行sudo

对于此类问题,NPM 可以解决很多问题,并允许使用多个节点版本,并根据您的用例进行选择。

我在设置新机器时遇到了类似的问题,安装 NPM 解决了这个问题。

【讨论】:

【参考方案2】:

(解决方案答案)

大家好,

我在 MacBook Pro 2018 上遇到了同样的问题。尝试全局安装任何依赖项(使用“-g”或“--global”)后,我确实收到了一个问题“EACCES”错误(与权限有关)

你可以简单地在你的命令前添加“sudo”什么会强制它。

例如:

sudo npm install gulp -g

sudo npm install browser-sync -g

享受吧!

【讨论】:

【参考方案3】:

顺便说一句,我通过将 /usr/local 的所有者更改为我自己解决了这个问题,以便允许 NPM 在其默认位置安装模块,而无需进一步要求 sudo 安装每个包。

sudo chown -R `whoami` /usr/local

【讨论】:

请注意,我遇到了一个类似的问题,npm install 无法写入 ~/.npm,结果发现有几个模块存在于 root 之前使用 sudo 完成的运行中,所以我做了上述以确保我的用户拥有 ~/.npm 的所有权来解决。 chown: /usr/local: Operation not permitted 该操作应允许使用 sudo。您是 root/admin 用户吗?也许禁用 SIP 可能会有所帮助,但我认为没有必要这样做。 我也收到“不允许操作”,即使使用 sudo。这个应该很简单的设置是一场噩梦!!! chown: /usr/local: Operation not allowed 有人找到解决方案了吗?【参考方案4】:

我建议您使用版本管理器(例如 nvm)安装 Node.js。这样一石两鸟:

首先,您可以在同一台计算机上管理多个版本的 Node.js(您迟早会想要这样做)。 其次,您可以解决在没有安装 Node.js 时遇到的所有访问问题。至少这是我的经验。

基本上就像跑步一样简单

$ curl https://raw.githubusercontent.com/creationix/nvm/v0.24.1/install.sh | bash

从命令行。

【讨论】:

【参考方案5】:

重新开始删除之前的 node.js 和 npm 安装以及这些:

~/.npmrc ~/.npm ~/tmp ~/.npm-init.js

要以自己的身份安装 nodejs 和 npm,而不是 root,请执行以下命令 (linux):

mkdir $HOME/bin

下载来源:http://nodejs.org/download/

cd v0.10.30/

./configure   --prefix=$HOME/bin/nodejs

make -j8
make install

把它放到上面 --prefix 定义的目录中

export PATH=$HOME/bin/nodejs/bin:$PATH

NODE_PATH 所以节点可以找到模块的目录,否则 npm install xxx 会将新安装的模块放入当前目录中的目录:

export NODE_PATH=$HOME/bin/nodejs/lib/node_modules

执行上述操作并使用语法:npm install xxxxx -g 始终使用 -g 表示全局

nodejs install 也为您提供 npm :

ls -la $HOME/bin/nodejs/bin

【讨论】:

但是问题是关于mac的 --prefix 命令不会将节点放入 ~/bin 目录。它只是安装到解压缩 tarbal 时创建的目录中 没关系。我是个假人。 make j8 后忘记安装了。【参考方案6】:

EACCES 是在执行操作时无权访问的错误。

换行:npm ERR! Error: EACCES, mkdir '/usr/local/lib/node_modules/bower' 我们可以看到npm 无法在给定位置创建目录。

原因很可能是您没有以超级用户身份运行该命令。事实上,错误日志甚至暗示:

npm 错误!请尝试以 root/管理员身份再次运行此命令。

要以管理员身份运行,您必须在这些命令前面加上 sudo。那就是:

sudo npm install -g bower。出于安全原因,您需要输入密码。

【讨论】:

感谢您的回复。我在我的问题中提到,许多在线建议不要使用 sudo (通过网络和 SO)。许多软件包作者也建议全局安装不需要sudo(例如Bower's instruction、Yeoman's instruction)。您对此有何回应? 您当然不想允许未经授权的用户对/usr/local/lib 文件夹进行写访问。如果您希望避免使用管理权限而不破坏根拥有的基础设施的权限,那么您需要告诉 NPM 将模块安装到您的用户拥有的位置。可以在这里看到配置 NPM 为您安装模块:***.com/questions/19352976/… 但我不会再称它为真正的 global 了。

以上是关于NPM 不会在 Mac 上安装任何包。新的,干净的构建。 `EACCES` 和其他错误的主要内容,如果未能解决你的问题,请参考以下文章

Mac下node.js卸载方法收集

无法在 node.js 上安装任何加密包

通过 npm 包共享 TypeScript 类型声明

Yarn vs npm: 你需要知道的一切

node 中 安装 yarn

包管理工具-yarn