Cha*_*had 1218 unix permissions sudo node.js npm
我刚刚通过nodejs.org上的软件包安装了node和npm,每当我尝试使用npm搜索或安装某些内容时,它会抛出以下错误,除非我sudo命令.我觉得这是一个权限问题?我已经是管理员了.
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
Run Code Online (Sandbox Code Playgroud)
Noa*_*oah 2175
这看起来像您的主目录中的权限问题.要回收.npm目录的所有权,请执行:
sudo chown -R $(whoami) ~/.npm
Run Code Online (Sandbox Code Playgroud)
Yve*_* M. 586
在写入npm目录(,等)时npm link,需要在安装Node时使用的权限npm install -g.
您可能使用root权限运行节点安装,这就是全局程序包安装要求您成为root用户的原因.
不要破解权限,以正确的方式安装节点.
在开发机器,你不应该安装并以root权限运行的节点,否则类似的事情npm link,npm install -g都需要相同的权限.
NVM(节点版本管理器)允许您安装没有root权限的节点,并允许您安装许多版本的Node以便轻松使用它们.完美的开发.
现在npm link,npm install -g将不再要求你成为root用户.
编辑:另请参阅https://docs.npmjs.com/getting-started/fixing-npm-permissions
不要破解权限,以正确的方式全局安装npm包.
如果您使用的是OSX或Linux,则可以为全局程序包和设置创建用户专用目录,npm并node了解如何查找全局安装的程序包.
查看这篇很棒的文章,了解有关在没有sudo的情况下全局安装npm模块的分步说明.
另请参阅:npm关于修复npm权限的文档.
小智 391
您还需要node_modules目录中的写权限:
sudo chown -R $USER /usr/local/lib/node_modules
Run Code Online (Sandbox Code Playgroud)
Joe*_*rra 63
更改"系统全局"文件夹上的所有者是一个黑客.在全新安装时,我会将NPM配置为使用已经可写的"用户全局"程序位置:
npm config set prefix ~/npm
Run Code Online (Sandbox Code Playgroud)
然后确保将该文件夹添加到路径中:
export PATH="$PATH:$HOME/npm/bin"
Run Code Online (Sandbox Code Playgroud)
见@ErikAndreas " 回答到NPM模块将不会在全球没有sudo安装
和再一步一步的指导,通过@sindresorhus与也设置$MANPATH.
小智 57
我在安装Recess(https://github.com/twitter/recess)来编译我的CSS for Bootstrap 3 时遇到了这个问题.
安装凹槽时:
-npm install recess -g
Run Code Online (Sandbox Code Playgroud)
您需要解锁home目录中的权限,例如Noah
说:
sudo chown -R `whoami` ~/.npm
Run Code Online (Sandbox Code Playgroud)您还需要对该node_modules目录具有写权限,如Xilo
所说,所以如果它仍然无效,请尝试:
sudo chown -R `whoami` /usr/local/lib/node_modules
Run Code Online (Sandbox Code Playgroud)如果您仍然看到错误,则可能还需要更正/usr/local权限:
sudo chown -R `whoami` /usr/local
Run Code Online (Sandbox Code Playgroud)请注意,如果你在Mac上,如本文所示, /usr/local/实际上并不是系统目录,因此,对于Mac用户来说,这个答案实际上是完全"安全的".但是,如果您使用的是Linux,请参阅下面的Christopher Will的答案,了解多用户友好的系统目录安全(但更复杂)解决方案.
sut*_*her 49
小心!!! 小心!!! 小心!!!
由于安全风险,chown或chmod 不是解决方案.
而是这样做,做:
如果你打电话,首先检查npm指向的地方:
npm config get prefix
Run Code Online (Sandbox Code Playgroud)
如果返回/ usr,您可以执行以下操作:
mkdir ~/.npm-global
export NPM_CONFIG_PREFIX=~/.npm-global
export PATH=$PATH:~/.npm-global/bin
Run Code Online (Sandbox Code Playgroud)
这会在您的主目录中创建一个npm-Direktory并指向它的npm.
要永久更改此更改,您必须将export-command添加到.bashrc:
echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=\$PATH:~/.npm-global/bin" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
Chr*_*ill 37
其他答案建议将系统目录的所有权或权限更改为特定用户.我非常不喜欢这样做,这可能会变得非常尴尬,并可能搞乱整个系统!
这是一种更通用,更安全的方法,也支持多用户.
为节点用户创建新组,并将所需用户添加到该组.然后将依赖于节点的文件/目录的所有权设置为该组.
# 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.)
Run Code Online (Sandbox Code Playgroud)
现在,您可以轻松地以用户身份安装模块
npm install -g generator-angular
Run Code Online (Sandbox Code Playgroud)
仍然需要以root身份安装某些模块(grunt,bower,yo等).这是因为他们在/ user/bin /中创建了符号链接.
编辑
3年后,我建议使用Node Version Manager.它可以为您提供大量的时间和麻烦.
Hop*_*per 21
有关如何通过错误修复权限的官方文档位于https://docs.npmjs.com/getting-started/fixing-npm-permissions.npm installEACCES
在使用.pkgOSX上的安装程序重新安装节点后,我遇到了此问题.这里有一些很好的答案,但我还没有看到npmjs.com的链接.
选项1:将权限更改为npm的默认目录
找到npm目录的路径:
npm config get prefix
Run Code Online (Sandbox Code Playgroud)对于许多系统,这将是/ usr/local.
警告:如果显示的路径只是/ usr,请切换到选项2.
将npm目录的所有者更改为当前用户的名称(您的用户名!):
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
Run Code Online (Sandbox Code Playgroud)
这会更改npm和其他一些工具(lib/node_modules,bin和share)使用的子文件夹的权限.
选项2:将npm的默认目录更改为另一个目录
有时您不想更改npm使用的默认目录(即/ usr)的所有权,因为这可能会导致一些问题,例如,如果您与其他用户共享系统.
相反,您可以配置npm以完全使用不同的目录.在我们的例子中,这将是我们的主文件夹中的隐藏目录.
为全局安装创建一个目录:
mkdir ~/.npm-global
Run Code Online (Sandbox Code Playgroud)配置npm以使用新的目录路径:
npm config set prefix '~/.npm-global'
Run Code Online (Sandbox Code Playgroud)打开或创建一个〜/ .profile文件并添加以下行:
export PATH=~/.npm-global/bin:$PATH
Run Code Online (Sandbox Code Playgroud)返回命令行,更新系统变量:
source ~/.profile
Run Code Online (Sandbox Code Playgroud)san*_*dor 14
我遇到了这个问题,虽然确实~/.npm应该由您的用户拥有,npm但没有在那里安装模块。
真正解决了我的问题的是这个命令:
npm config set prefix ~/.npm
Run Code Online (Sandbox Code Playgroud)
它将确保您的所有全局安装都在此前缀下。您的用户拥有此目录很重要。
pti*_*tim 12
好像我们需要更多的答案,但无论如何..
Sindre Sorus有一个指南全局安装npm软件包,在OS X和Linux上没有sudo,概述了如何干净地安装而不会弄乱权限:
这是一种为给定用户全局安装包的方法.
为全局包创建目录
Run Code Online (Sandbox Code Playgroud)mkdir "${HOME}/.npm-packages"引用此目录以供将来在.bashrc/.zshrc中使用:
Run Code Online (Sandbox Code Playgroud)NPM_PACKAGES="${HOME}/.npm-packages"指示npm存储全局安装包的位置.在你的
$HOME/.npmrc文件中添加:Run Code Online (Sandbox Code Playgroud)prefix=${HOME}/.npm-packages确保节点将找到它们.将以下内容添加到.bashrc/.zshrc中:
Run Code Online (Sandbox Code Playgroud)NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"确保您找到已安装的二进制文件和手册页.将以下内容添加到您的
.bashrc/.zshrc:Run Code Online (Sandbox Code Playgroud)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以自动执行上述步骤
TL; DR
总是使用
sudo -i或sudo -H在运行npm install时安装全局包.
-
使用时npm,将包下载到用户主目录.当您以sudo身份运行时,npm将文件安装到同一目录,但现在它们归root所有.
所以这绝对是每个曾经使用过的人npm:
npm install foosudo install -g foo-cli没有问题安装全局包npm install barnpm现在你必须再去chmod一个目录,让设计师感到沮丧当您对sudo 使用-i或-H选项时,您的主目录将是root主目录.任何全局安装都会将包缓存到/root/.npm而不是在的root文件中/home/me/.npm.
只是总是使用sudo -i或sudo -H运行npm install时安装全局包,您的npm权限问题将消失.
好的.
http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html
-
qv修复已经性交的已接受的答案npm.
我有一个类似的问题在NPM模块不会没有sudo全局安装,问题是,当我安装节点我用sudo通过chris/lea ppa repo.
我的解决方案是卸载节点,然后以这种方式安装它:
从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 uncompressed folder
sudo chown $ USER -R/usr/local
./configure --prefix =/usr/local && make && make install
PD:如果您不想更改/ usr/local文件夹的所有权,可以将其安装在您已拥有的位置.这种方法的问题是您必须使用bash命令行绑定安装文件夹,以便我们稍后可以使用node命令
mkdir~/opt
./configure --prefix =〜/ opt && make && make install
echo'export PATH =〜/ opt/bin:$ {PATH}'>>〜/ .bashrc #or~/.profile或〜/ .bash_profile或〜/ .zshenv取决于当前的操作系统
无论使用哪种方法,您都可以在不使用sudo的情况下执行以下操作
npm install -g module_to_install
当您运行npm install -g somepackage时,您可能会收到EACCES错误,要求您以root/Administrator身份再次运行该命令.这是一个权限问题.
它很容易修复,打开终端(应用程序>实用程序>终端)
sudo chown -R $USER /usr/local/lib/node_modules
Run Code Online (Sandbox Code Playgroud)
**我强烈建议你不要使用sudo包管理(sudo npm -g install something),因为你以后可能会遇到一些问题**
参考:http://foohack.com/2010/08/intro-to-npm/
对于Mac(从Christoper Will的回答中采用)
Mac OS X 10.9.4
系统偏好>用户和组>(解锁)>按+:
新帐户>"组"
帐户名称:nodegrp
创建组后,勾选要包含在该组中的用户
须藤chgrp命令-R nodegrp的/ usr /本地/ LIB/node_modules/
须藤chgrp命令nodegrp的/ usr /斌/节点
须藤chgrp命令nodegrp的/ usr /斌/ NPM
须藤CHOWN -R $(WHOAMI):nodegrp〜/ .npm
小智 5
对我来说,只执行
sudo chown -R $(whoami) ~/.npm
Run Code Online (Sandbox Code Playgroud)
不起作用。然后,我也执行
sudo chown -R $(whoami) /usr/lib/node_modules/
sudo chown -R $(whoami) /usr/bin/node
sudo chown -R $(whoami) /usr/bin/npm
Run Code Online (Sandbox Code Playgroud)
一切正常!
问题:您(用户)没有正确的目录权限集。
即时的出路是使用 sudo 运行 npm install,但这可能会给您带来相同的错误或不正确的安装。
并且更改目录所有权不是一个好的选择,一个临时补丁。
解决方案/建议:更改 npm 的默认目录(来自官方文档)
在继续之前备份您的计算机。
(可选)如果您安装错误,请先卸载它:
npm uninstall <package-name> # use sudo if you used it while installation
npm cache verify # or, npm cache clean for npm version below 5.x.x
Run Code Online (Sandbox Code Playgroud)
为全局安装创建一个目录:
mkdir ~/.npm-global
配置 npm 以使用新的目录路径:
npm config set prefix '~/.npm-global'
打开或创建一个~/.profile或~/.bash_profile文件并添加以下行:
export PATH=~/.npm-global/bin:$PATH
返回命令行,更新系统变量,或重新启动终端:
source ~/.profile
(可选)测试:在不使用 sudo 的情况下全局下载包。
npm install -g jshint
| 归档时间: |
|
| 查看次数: |
436470 次 |
| 最近记录: |