我刚刚通过nodejs.org上的包安装了node和npm,每当我尝试使用npm搜索或安装某个东西时,它会抛出以下错误,除非我执行命令。我觉得这是权限问题?我已经是管理员了。

npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/chietala/npm-debug.log
npm ERR! not ok code 0

当前回答

对于Mac(采用Christoper Will的答案)

Mac OS X 10.9.4

系统首选项>用户和组>(解锁)>按+:新建帐户>“组”帐户名:nodegrp创建组后,勾选要包含在此组中的用户sudo chgrp-R nodegrp/usr/local/lib/node_modules/sudo chgrp nodegrp/usr/bin/nodesudo chgrp节点组/usr/bin/npmsudo chown-R$(whoami):nodegrp~/.npm

其他回答

在没有sudo的情况下,我在NPM模块上也遇到了类似的问题。问题是,当我安装节点时,我通过chris/lea ppa repo使用sudo进行了安装。

我的解决方案是卸载节点,然后按以下方式安装:

从nodejs.org#下载最新的稳定节点源代码,在我的例子中是node-v0.10.20.tar.gz

tar-zxf node-v0.10.20.tar.gz#解压缩源cd node-v0.10.20#输入未压缩文件夹sudo chown$USER-R/usr/local./configure--prefix=/usr/local&&make&&makeinstall

PD:如果您不想更改/usr/local文件夹的所有权,可以将其安装在您已经拥有的位置。这种方法的问题是,您必须将安装文件夹与bash命令行绑定,以便稍后使用node命令

mkdir~/opt./configure--prefix=~/opt&&make&&makeinstallecho'export PATH=~/opt/bin:${PATH}'>~/.bashrc#或~/.profile或~/.bash _profile或~/.zshenv,具体取决于当前操作系统

使用这两种方法中的任何一种,您都可以在不使用sudo的情况下执行以下操作

npm安装-g模块安装

事实上,我也有同样的问题。我在运行Ubuntu。我的问题出现了,因为我丢失了Ubuntu的公钥。甚至没有更新我的系统。它给出了GPG错误。在这种情况下,您可以使用以下命令重新获取密钥:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>

之后,npm工作正常!

@Yves M.的回答与我的解决方案非常相似。以下是我使用的命令,与他的略有不同。

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

然后查询最新版本:

nvm ls-remote

然后安装最新版本:

nvm install YOUR_VERSION_HERE

实例

nvm install v5.8.0

好像我们需要更多的答案,但无论如何。。

Sindre Sorus有一份在OS X和Linux上不使用sudo的情况下全局安装npm包的指南,概述了如何在不干扰权限的情况下干净地安装:

以下是为给定用户全局安装软件包的方法。为全局包创建目录mkdir“${HOME}/.npm包”在.bashrc/.zshrc中引用此目录以供将来使用:NPM_PACKAGES=“${HOME}/.NPM包”向npm指明存储全局安装包的位置。在$HOME/.npmrc文件中添加:prefix=${HOME}/.npm包确保节点将找到它们。将以下内容添加到.bashrc/.zshrc中:NODE_PATH=“$NPM_PACKAGES/lib/NODE_modules:$NODE_PATH”确保找到已安装的二进制文件和手册页。将以下内容添加到.bashrc/.zshrc中:PATH=“$NPM_PACKAGES/bin:$PATH”#取消设置manpath,以便我们可以通过`manpath从/etc/manpath继承`#命令unset MANPATH#如果您已经在配置中的其他位置修改了MANPATH,请删除MANPATH=“$NPM_PACKAGES/share/man:$(MANPATH)”查看npm-g_nosudo,了解如何自动执行上述步骤

请查看本指南的来源以获取最新更新。

TL;博士

在运行npm安装以安装全局包时,请始终使用sudo-i或sudo-H。


当您使用npm时,它会将包下载到您的用户主目录。当您以sudo身份运行时,npm会将文件安装到同一目录中,但现在它们归root用户所有。

所以,这是每一个使用过npm的人都会遇到的情况:

使用npm install foo毫无问题地安装一些本地软件包使用sudo install-g foo-cli安装全局软件包,无问题尝试使用npm安装栏安装本地软件包对npm设计者感到沮丧,因为你必须重新创建一个目录

在sudo中使用-i或-H选项时,主目录将是root的主目录。任何全局安装都会将包缓存到/root/.npm,而不是/home/me/.npm中的root拥有的文件。

只要在运行npm安装来安装全局包时始终使用sudo-i或sudo-H,您的npm权限问题就会迎刃而解。

永远。

--问:修复一个已经一团糟的npm的公认答案。