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 link
, npm install -g
等)中进行写操作时,您需要使用安装Node时的权限。
您可能使用根权限运行节点安装,这就是全局程序包安装要求您为root的原因。
解决scheme1:NVM
不要用权限破解,以正确的方式安装节点。
在开发机器上,不应该使用root权限来安装和运行节点,否则像npm link
, npm install -g
这样的东西需要相同的权限。
NVM (节点版本pipe理器)允许您在没有root权限的情况下安装节点,并且还允许您安装许多版本的节点,以便轻松地与它们一起播放。完美的开发。
- 卸载节点(可能需要root权限)。 这可能会帮助你。
- 然后按照此页面上的说明安装NVM 。
- 通过NVM
nvm install node
:nvm install node
现在npm link
, npm install -g
将不再要求你成为root用户。
解决scheme2:为给定用户全局安装软件包
不要用权限破解,以正确的方式在全局安装npm包。
如果您使用的是OSX或Linux,则可以为您的全局程序包创build一个用户专用目录,并设置npm
和node
以了解如何查找全局安装的程序包。
查看这篇文章,了解如何在没有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
-
你需要解锁你的
home
目录的权限,就像Noah所说:sudo chown -R `whoami` ~/.npm
-
你也需要对
node_modules
目录的写入权限,就像Xilo说的那样,如果它仍然不起作用,请尝试:sudo chown -R `whoami` /usr/local/lib/node_modules
-
如果您仍然看到错误,则可能还需要更正
/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,概述了如何干净地安装而不会干扰权限:
这是一种为给定用户全局安装软件包的方法。
为您的全局包创build一个目录
mkdir "${HOME}/.npm-packages"
在.bashrc / .zshrc中引用此目录以备将来使用:
NPM_PACKAGES="${HOME}/.npm-packages"
指出npm在哪里存储您的全球安装软件包。 在您的
$HOME/.npmrc
文件中添加:prefix=${HOME}/.npm-packages
确保节点能find它们。 将以下内容添加到.bashrc / .zshrc中:
NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
确保你会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的默认目录
-
findnpm目录的path:
npm config get prefix
对于很多系统,这将是/ usr / local 。
警告 :如果显示的path是/ usr ,请切换到选项2 。
-
将npm目录的所有者更改为当前用户(您的用户名!)的名称:
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
这将更改npm和其他一些工具( lib / node_modules , bin和share )使用的子文件夹的权限。
选项2:将npm的默认目录更改为另一个目录
有时你不想改变npm使用的默认目录(例如/ usr )的所有权,因为这可能会导致一些问题,例如,如果你与其他用户共享系统。
相反,您可以将npmconfiguration为完全使用不同的目录。 在我们的例子中,这将是我们的主文件夹中的隐藏目录。
-
为全局安装创build一个目录:
mkdir ~/.npm-global
-
configurationnpm以使用新的目录path:
npm config set prefix '~/.npm-global'
-
打开或创build〜/ .profile文件并添加以下行:
export PATH=~/.npm-global/bin:$PATH
-
回到命令行上,更新你的系统variables:
source ~/.profile
对于Mac(通过Christoper Will的回答)
Mac OS X 10.9.4
-
系统首选项>用户和组>(解锁)>按+:
新帐户>“群组”
帐户名称:nodegrp创build组后,勾选要包含在该组中的用户
-
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 -i
或sudo -H
。
–
当你使用npm
它将软件包下载到你的用户主目录。 以sudo身份运行时, npm
会将文件安装到相同的目录,但是现在它们归root所有。
所以这就是所有曾经使用过npm
:
- 使用
npm install foo
安装一些本地软件包而不会出现问题 - 使用
sudo install -g foo-cli
安装全局包,没有问题 - 尝试使用
npm install bar
来安装本地软件包 - 现在,你必须再次进入
chmod
目录,对npm
devise者感到沮丧
在sudo中使用-i
或-H
选项时,您的主目录将成为root
的主目录。 任何全局安装都会将软件包caching到/root/.npm
而不是/ /root/.npm
的root
文件。
运行npm install
来安装全局程序包时,总是使用sudo -i
或sudo -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 :
约翰·帕帕的步骤是:
- 使用brew来安装没有npm的节点
- 更新你的.bash_profile / .bashrc让npm和节点知道在哪里安装和查找软件包
- 使用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