npm抛出错误没有sudo

我只是通过nodejs.org上的包安装node和npm,每当我尝试search或安装npm的时候,都会抛出下面的错误,除非我sudo命令。 我有一种感觉,这是一个权限问题? 我已经是pipe理员。

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 

这看起来像您的主目录中的权限问题。 要回收.npm目录的所有权, 执行以下命令:

 sudo chown -R $(whoami) ~/.npm 

当您在npm目录npm linknpm install -g等)中进行写操作时,您需要使用安装Node时的权限。

您可能使用根权限运行节点安装,这就是全局程序包安装要求您为root的原因。


解决scheme1:NVM

不要用权限破解,以正确的方式安装节点。

在开发机器上,不应该使用root权限来安装和运行节点,否则像npm linknpm install -g这样的东西需要相同的权限。

NVM (节点版本pipe理器)允许您在没有root权限的情况下安装节点,并且还允许您安装许多版本的节点,以便轻松地与它们一起播放。完美的开发。

  1. 卸载节点(可能需要root权限)。 这可能会帮助你。
  2. 然后按照此页面上的说明安装NVM 。
  3. 通过NVM nvm install nodenvm install node

现在npm linknpm install -g将不再要求你成为root用户。


解决scheme2:为给定用户全局安装软件包

不要用权限破解,以正确的方式在全局安装npm包。

如果您使用的是OSX或Linux,则可以为您的全局程序包创build一个用户专用目录,并设置npmnode以了解如何查找全局安装的程序包。

查看这篇文章,了解如何在没有sudo的情况下全局安装npm模块。

另请参阅:npm关于Fixing npm权限的文档。

此外,您还需要在node_modules目录中具有写权限:

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

我在安装Recess( https://github.com/twitter/recess )时为了编译Bootstrap 3的CSS而遇到了这个问题。

安装凹槽时:

 -npm install recess -g 
  1. 你需要解锁你的home目录的权限,就像Noah所说:

     sudo chown -R `whoami` ~/.npm 
  2. 你也需要对node_modules目录的写入权限,就像Xilo说的那样,如果它仍然不起作用,请尝试:

     sudo chown -R `whoami` /usr/local/lib/node_modules 
  3. 如果您仍然看到错误,则可能还需要更正/usr/local权限 :

     sudo chown -R `whoami` /usr/local 

请注意,正如本文所示, /usr/local/实际上并不是一个系统目录,如果你在Mac上,那么对于Mac用户来说,这个答案实际上是完全“安全的”。 但是,如果您在Linux上,请参阅下面的Christopher Will的答案,以获得多用户友好的系统目录安全(但更为复杂)的解决scheme。

更改“系统全局”文件夹的所有者是一个黑客。 在全新安装中,我将configurationNPM以使用“用户全局”程序的可写位置:

 npm config set prefix ~/npm 

然后确保将该文件夹添加到您的path中:

 export PATH="$PATH:$HOME/npm/bin" 

查看@ErikAndreas对NPM模块的回答 将不会在没有sudo的情况下进行全局安装,也不会在 @sindresorhus设置$MANPATH 情况下进行 更长时间的分步指导 。

其他答案build议将系统目录的所有权或权限更改为特定用户。 我这样做非常不利,这会变得非常尴尬,可能会弄乱整个系统!

这是一个支持多用户的更通用和更安全的方法。

为节点用户创build一个新组,并将所需的用户添加到该组。 然后将依赖于节点的文件/目录的所有权设置为该组。

 # Create new group sudo groupadd nodegrp # Add user to group (logname is a variable and gets replaced by the currently logged in user) sudo usermod -a -G nodegrp `logname` # Instant access to group without re-login newgrp nodegrp # Check group - nodegrp should be listed as well now groups # Change group of node_modules, node, npm to new group sudo chgrp -R nodegrp /usr/lib/node_modules/ sudo chgrp nodegrp /usr/bin/node sudo chgrp nodegrp /usr/bin/npm # (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.) 

现在,您可以以用户身份轻松安装模块

 npm install -g generator-angular 

一些模块(grunt,bower,哟等)仍然需要以root身份进行安装。 这是因为他们在/ user / bin /中创build符号链接。

编辑

3年后,我build议使用节点版本pipe理器 。 它保护你很多时间和麻烦。

好像我们在这里需要更多的答案,但无论如何..

Sindre Sorus有一个指南在OS X和Linux上全局安装npm包,没有sudo,概述了如何干净地安装而不会干扰权限:

这是一种为给定用户全局安装软件包的方法。

  1. 为您的全局包创build一个目录

     mkdir "${HOME}/.npm-packages" 
  2. 在.bashrc / .zshrc中引用此目录以备将来使用:

     NPM_PACKAGES="${HOME}/.npm-packages" 
  3. 指出npm在哪里存储您的全球安装软件包。 在您的$HOME/.npmrc文件中添加:

     prefix=${HOME}/.npm-packages 
  4. 确保节点能find它们。 将以下内容添加到.bashrc / .zshrc中:

     NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH" 
  5. 确保你会find安装的二进制文件和手册页。 将以下内容添加到.bashrc / .zshrc

     PATH="$NPM_PACKAGES/bin:$PATH" # Unset manpath so we can inherit from /etc/manpath via the `manpath` # command unset MANPATH # delete if you already modified MANPATH elsewhere in your config MANPATH="$NPM_PACKAGES/share/man:$(manpath)" 

检查npm-g_nosudo自动执行上述步骤

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

当您运行npm install -g somepackage时,可能会收到EACCES错误,要求您以root / Administrator身份再次运行该命令。 这是一个权限问题。

很容易修复 ,打开您的terminal(应用程序>实用程序>terminal)

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

**我强烈build议你不要使用包pipe理与sudo(sudo npm -g安装一些东西),因为你以后可以得到一些问题**

参考: http : //foohack.com/2010/08/intro-to-npm/

有关如何解决npm install权限与EACCES错误的官方文档位于https://docs.npmjs.com/getting-started/fixing-npm-permissions

在使用OSX上的.pkg安装程序重新安装节点之后,我遇到了这个问题。 这里有一些很好的答案,但是我还没有看到npmjs.com的链接。

选项1:将权限更改为npm的默认目录

  1. findnpm目录的path:

     npm config get prefix 

对于很多系统,这将是/ usr / local

警告 :如果显示的path是/ usr ,请切换到选项2

  1. 将npm目录的所有者更改为当前用户(您的用户名!)的名称:

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

    这将更改npm和其他一些工具( lib / node_modulesbinshare )使用的子文件夹的权限。

选项2:将npm的默认目录更改为另一个目录

有时你不想改变npm使用的默认目录(例如/ usr )的所有权,因为这可能会导致一些问题,例如,如果你与其他用户共享系统。

相反,您可以将npmconfiguration为完全使用不同的目录。 在我们的例子中,这将是我们的主文件夹中的隐藏目录。

  1. 为全局安装创build一个目录:

     mkdir ~/.npm-global 
  2. configurationnpm以使用新的目录path:

     npm config set prefix '~/.npm-global' 
  3. 打开或创build〜/ .profile文件并添加以下行:

     export PATH=~/.npm-global/bin:$PATH 
  4. 回到命令行上,更新你的系统variables:

     source ~/.profile 

对于Mac(通过Christoper Will的回答)

Mac OS X 10.9.4

  1. 系统首选项>用户和组>(解锁)>按+:

    新帐户>“群组”
    帐户名称:nodegrp

    创build组后,勾选要包含在该组中的用户

  2. sudo chgrp -R nodegrp / usr / local / lib / node_modules /
    sudo chgrp nodegrp / usr / bin / node
    sudo chgrp nodegrp / usr / bin / npm
    sudo chown -R $(whoami):nodegrp〜/ .npm

对我来说,只能执行

 sudo chown -R $(whoami) ~/.npm 

不起作用。 然后,我也执行

 sudo chown -R $(whoami) /usr/lib/node_modules/ sudo chown -R $(whoami) /usr/bin/node sudo chown -R $(whoami) /usr/bin/npm 

而且一切正常!

小心!!! 小心!!! 小心!!!

因为安全风险,chown或chmod 不是解决scheme。

而是这样做:

首先检查,如果您打电话给npm指向:

 npm config get prefix 

如果/ usr返回,您可以执行以下操作:

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

这将在您的主目录中创build一个npm-Direktory,并指向npm。

为了永久地改变这个变化,你必须把export-command加到你的.bashrc中:

 echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=$PATH:~/.npm-global/bin" >> ~/.bashrc 

我有一个类似的问题在NPM模块不会安装全球没有sudo ,问题是, 当我安装节点,我用sudo通过chris / lea ppa回购

我的解决scheme是卸载节点,然后以这种方式安装它:

从nodejs.org下载最新稳定的节点源代码#in my case node-v0.10.20.tar.gz

tar -zxf node -v0.10.20.tar.gz #uncompress sources

cd node-v0.10.20 #enter解压缩文件夹

sudo chown $ USER -R / usr / local

./configure –prefix = / usr / local && make && make install

PD:如果你不想改变/ usr / local文件夹的所有权,你可以把它安装在你已经拥有的地方。 这种方法的问题是,你将不得不将安装文件夹绑定到bash命令行,以便我们可以稍后使用节点命令

mkdir〜/ opt

./configure –prefix =〜/ opt && make && make install

echo'export PATH =〜/ opt / bin:$ {PATH}'>>〜/ .bashrc#或〜/ .profile或〜/ .bash_profile或〜/ .zshenv取决于当前的操作系统

无论使用哪种方法,您都可以在不使用sudo的情况下执行以下操作

npm install -g module_to_install

在我的情况下,这是因为〜/ tmp的许可。所以我这样做:

 sudo chown -R $USER ~/tmp 

没关系!

TL; DR

运行npm install安装全局程序包时,始终使用sudo -isudo -H

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

所以这就是所有曾经使用过npm

  • 使用npm install foo安装一些本地软件包而不会出现问题
  • 使用sudo install -g foo-cli安装全局包,没有问题
  • 尝试使用npm install bar来安装本地软件包
  • 现在,你必须再次进入chmod目录,对npmdevise者感到沮丧

在sudo中使用-i-H选项时,您的主目录将成为root的主目录。 任何全局安装都会将软件包caching到/root/.npm而不是/ /root/.npmroot文件。

运行npm install来安装全局程序包时,总是使用sudo -isudo -H ,你的npm权限问题就会消失。

好的。

http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html

QV修复已经性交的npm的接受答案。

这是我如何解决Windows 8.1上的问题:

  • 转到您的nodejs安装(通常是C:\ Program Files \ nodejs)
  • 右键单击node_modules文件夹并转到属性
  • 单击安全选项卡并高级
  • 在顶部你会看到“Owner:SYSTEM”,点击更改
  • input您想要的权限,然后点击确定
  • 选中高级设置底部的checkbox“将所有子对象权限条目replace为来自此对象的可inheritance权限条目”,然后单击确定
  • 做任何你需要的npm安装/更新

在Mac OS X上,使用Homebrew的 brew install npm进行安装时,安装path为/usr/local/share/npm/ bin/lib/node_modules/子文件夹。

运行这个命令将所有者更改为您当前login的用户应该修复这一切,并允许您在不使用sudo情况下安装全局NPM软件包。

 sudo chown -R $USER ~/.npm /usr/local/share/npm/ 

osx 自制软件

约翰·帕帕指出了这个问题背后的历史和推理,并给出了一个坚实的解决scheme :

约翰·帕帕的步骤是:

  1. 使用brew来安装没有npm的节点
  2. 更新你的.bash_profile / .bashrc让npm和节点知道在哪里安装和查找软件包
  3. 使用brew来更新节点和npm来更新自己

希望这有助于好奇!

如果在npm安装期间popup类似下面的内容,或者想要在Mac上全局安装包,请使用Sudo

npm ERR! 代码EACCES
npm ERR! errno -13
npm ERR! 系统调用访问

问题:您无权写入npm用于存储全局程序包和命令的目录。

解决scheme:允许npm的权限。

打开terminal:

命令+空格键,然后键入“terminal”

input这个命令:

sudo chown -R $(whoami)$(npm config获取前缀)/ {lib / node_modules,bin,share}

  • 注意:这将需要您的密码。

这个解决scheme只允许所需的目录,保持其他目录的安全。

其实我也有同样的问题 我正在运行Ubuntu。 由于我丢失了我的Ubuntu公钥,矿难问题就出现了。 甚至更新我的系统没有发生。 这是给GPG错误。 在这种情况下,您可以使用以下命令重新获得您的密钥:

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

之后npm工作正常!

如果更改目录/usr/local/lib/npm_modules不起作用,您应该将您的用户添加到组(大多数情况下,这是staff组),该用户拥有/usr/bin目录的rwx权限。 因为npm试图与/usr/bin/__package__ symlink

PS不要忘记更改用户组后重新login

这是我使用和工作的解决scheme。 我试图利用whoami从未工作。

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

然后

sudo chown -R $USER /usr/local/bin/npm

然后

sudo chown -R $USER /usr/local/bin/node

这里另一个很好的解决方法是正确configurationNPM,运行以下命令:

 npm config set prefix '~/.npm_packages' PATH=$PATH:$HOME/.npm_packages/bin; export PATH 

@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 

对我来说最好的select是npm文档中build议的选项,它首先通过运行npm config get prefix来检查默认安装的全局node_modules的位置。 如果你得到了,像我在Trusty上做的那样,你可能想把它改成一个你可以安全地拥有的文件夹,而不用像我这样做。

为此,请在系统中select或创build一个新文件夹。 你可能想要把它放在你的主目录中,或者像我一样在/usr/local下保持一致性,因为我也是一个Mac用户(我不喜欢根据我碰巧在不同的地方看到不同的地方的前面)。 另一个很好的理由是, /usr/local文件夹可能已经存在于你的PATH中(除非你喜欢乱搞你的PATH),但是你新创build的文件夹可能不是,你需要将其添加到您自己的.bash-profile.bashrc文件中。

长话短说,我用npm config set prefix '/usr/local'改变了全局模块的默认位置,创build了文件夹/usr/local/lib/node_modules (它将被npm使用)并且改变了文件夹的权限npm使用命令:

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

现在,您可以安全地全局安装任何模块。 希望这可以帮助!

像这样使用sudo用户模式安装npm包

 sudo npm install mocha -g --save-dev 

我发现,如果你只是sudo -s “它只是启动一个具有root权限的shell作为一个步骤”,它真的适合我。 我不知道这是不是一个好的做法。

我希望它有帮助。

参考: https : //apple.stackexchange.com/posts/14423/revisions

最好的解决办法是由npm文档提供的。


对于Ubuntubuild议解决scheme是选项#2

简要步骤:
为全局安装创build一个目录:
mkdir ~/.npm-global

configurationnpm以使用新的目录path:
npm config set prefix '~/.npm-global'
npm config get prefix可以帮助您validation前缀是否已更新。 结果将是<您的主目录> /。npm-global

打开或创build〜/ .profile文件并添加以下行:
export PATH=~/.npm-global/bin:$PATH

回到命令行上,更新你的系统variables:
source ~/.profile

你也可以使用相应的ENVvariables来代替步骤2-4(例如,如果你不想修改〜/ .profile):

NPM_CONFIG_PREFIX=~/.npm-global


对于Macbuild议的解决scheme是选项#3

在Mac OS上,使用Homebrew软件包pipe理器可以完全避免这个问题

brew install node

我将我的用户帐户设置为/ usr / local目录的所有者,以便在那里发出正常的命令。

sudo chown -R $USER /usr/local

参考: http : //howtonode.org/introduction-to-npm