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 yo
、npm install -g grunt
、npm install -g nvm
、npm 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` 和其他错误的主要内容,如果未能解决你的问题,请参考以下文章