我刚刚重新安装了Ubuntu 12.04 LTS,之前我做了其他任何步骤:
通过包管理器使用以下脚本安装节点
sudo apt-get update
sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs
试图在全球范围内安装yeoman,express,n,yeoman的发电机,所有这些都返回了相同的错误
npm ERR!错误:EACCES,符号链接'../ lib / node_modules / n / bin / n'
npm ERR! {[错误:EACCES,符号链接'../lib/node_modules/n/bin/n']错误号:3,代码:'EACCES',路径:'../lib/node_modules/n/bin/n'} < / p>
npm ERR!
npm ERR!请尝试以root / Administrator方式再次运行此命令。
npm ERR! System Linux 3.8.0-29-generic
npm ERR!命令“/ usr / bin / node”“/ usr / bin / npm”“install”“ - g”“ - d”“n”
npm ERR! cwd / home / heberlz
npm ERR! node -v v0.10.20
npm ERR! npm -v 1.3.11
npm ERR! path ../ lib / node_modules / n / bin / n
npm ERR!代码EACCES
npm ERR!错误3
npm ERR!堆栈错误:EACCES,符号链接'../ lib / node_modules / n / bin / n'
npm ERR!
npm ERR!其他日志记录详细信息可在以下位置找到:
npm ERR! /home/heberlz/npm-debug.log
npm ERR!不好的代码0
以递归方式回收以下文件夹的所有权〜/ .npm,/ usr / lib / node,/ usr / lib / node_modules以及以下符号链接/ usr / bin / node ,/ usr / bin / nodejs 绝对没有成功
我需要在没有sudo的情况下安装yeoman及其发电机,以后不会遇到麻烦:(
答案 0 :(得分:308)
Ubuntu 12.04并使用Chris Lea的PPA为我安装以下作品:
npm config set prefix '~/.npm-packages'
并将$ HOME / .npm-packages / bin添加到$ PATH
附加到.bashrc
export PATH="$PATH:$HOME/.npm-packages/bin"
请参阅@passy
中的https://stackoverflow.com/a/18277225答案 1 :(得分:21)
如果您的路径中已经有$HOME/bin
,那么更简单的解决方案就是......
npm config set prefix ~
$HOME/bin
目录中。 由于此讨论实际上是关于降低运行sudo
的安全风险,您还应该知道任何节点应用程序都可能安装的应用程序名称与您认为的注册节点程序包名称不匹配重新安装。因此存在安全风险,npm install
将替换现有系统命令或$HOME/bin
中已有的系统命令。如果您担心,请先检查您要安装的应用的bin
文件中的scripts
和package.json
属性。
一般来说,最安全的是:
$HOME/bin
放在路径的最后,这样系统命令就不会被取代。$PATH
中的任何相对路径,这样您就不会意外地运行恰好位于当前目录中的命令。参考:
答案 2 :(得分:13)
截至2014年10月:
Node.js可以从NodeSource Debian和Ubuntu二进制发行版repository获得。
curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs
就是这样。
过时回答:
不使用sudo的最快方法就像描述here by isaac
我强烈建议您不要使用sudo进行包管理! 包可以运行任意脚本,这使得sudoing包 经理命令像电锯理发一样安全。当然,它很快 肯定会切断任何障碍,但实际上你可能会 希望那个障碍留在那里。
我建议这样做一次:
sudo chown -R $USER /usr/local
修改强>
关于将/ usr / local的所有权更改为当前用户,存在某些安全问题和功能限制:
话虽如此,如果你想在不使用sudo的情况下安装全局模块,我认为没有比提到的更好的解决方案(从实用的角度来看)。安全性与易用性是一个非常广泛的主题,并没有简单的答案 - 它只取决于您的要求。
答案 3 :(得分:10)
问题是我使用sudo安装了节点,以避免在全局安装npm模块时出现错误,必须永远不要用sudo安装节点。
我的解决方案是以这种方式重新安装节点:
从nodejs.org下载最新的稳定节点源#in我的案例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 -R $ USER / usr / local
./ configure --prefix = / usr / local&amp;&amp;制造&amp;&amp; make install
需要注意的一点是,只有取得/ usr / local文件夹的所有权才能解决,因为节点安装本身是用sudo
安装yeoman的最后一步:#yeough在yeoman.io它说做“npm install -g yo”已经安装了bower和grunt,有一些grunt的子模块失败了,所以我通过自己安装它来解决这个问题
npm install -g bower
npm install -g grunt
npm install -g yo
npm install -g generator-angular
答案 4 :(得分:4)
我用环境变量和shell别名解决了这个问题:
export NPM_PREFIX=$HOME/node
alias npmg="npm -g --prefix $NPM_PREFIX"
对我来说,npm并不尊重.npmrc中的“prefix”配置设置。
答案 5 :(得分:3)
找到npm目录的路径:
npm config get prefix
对于许多系统,这将是/ usr / local。
将npm目录的所有者更改为当前用户的名称(您的用户名!):
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
这会更改npm和其他一些工具(lib / node_modules,bin和share)使用的子文件夹的权限。
以下是完整详情的链接
https://docs.npmjs.com/getting-started/fixing-npm-permissions
答案 6 :(得分:2)
根据这个类似的SO帖子:npm throws error without sudo
您可能对~/.npm
目录存在所有权问题。
与那个答案一样,试试:
sudo chown -R `whoami` ~/.npm
答案 7 :(得分:1)
答案 8 :(得分:1)
实际上,我刚刚更改了root所拥有的用户文件夹的权限:
sudo chown -R $USER ~/.config/configstore
然后我可以&#34; npm install&#34; &#34; bower install&#34;没有sudo! 工作得很好!
答案 9 :(得分:0)
由于同样的原因引起的这个问题和其他问题可以解决在用户空间中安装Node。
您可以在终端中复制和粘贴
NODEJS_ROOT=${NODEJS_ROOT:-~/nodejs}
cd /tmp
wget -N http://nodejs.org/dist/node-latest.tar.gz && tar xzf node-latest.tar.gz
NODEJS_CURRENT=$(tar tf node-latest.tar.gz|head -1)
mkdir -p $NODEJS_ROOT/$NODEJS_CURRENT
cd $NODEJS_CURRENT
./configure --prefix=$NODEJS_ROOT/$NODEJS_CURRENT && make install
cd $NODEJS_ROOT
rm current 2> /dev/null # Removes current symbolic link, if any
ln -s $NODEJS_CURRENT current
也可以启动相同的命令以使Node更新到最新版本。
不要忘记编辑您的环境。只做一次,
echo "export NODEJS_ROOT=$NODEJS_ROOT" >> $HOME/.bash_profile
echo 'export PATH=$NODEJS_ROOT/current/bin:$PATH' >> $HOME/.bash_profile
source $HOME/.bash_profile # reload your env, so you can use node right now
查看此文章,了解如何Install Node.js without sudo。
有关此主题的更一般解决方案(即在本地安装软件),请参阅dotsoftware。
答案 10 :(得分:0)
使用lubuntu 14.04.3,我尝试更改.npm和npm前缀的所有权,更新我的路径,npm安装模块到我的主目录没有sudo但是路径不正确所以没有找到像ember这样的模块,{{3解决了问题,节点/ npm的快速设置指南linuxbew
答案 11 :(得分:0)
只使用nvm 您将能够在不同的节点版本之间动态切换,并且它已为您的用户本地安装。不需要sudo。只要确保您已经事先完全清理了旧节点即可。
答案 12 :(得分:0)
为了在本地安装 Node.js 和 npm 而不必使用 sudo 打开终端并输入:
Games
答案 13 :(得分:-1)
我发现Pawel Grzybek's explanations非常有说服力:它们归结为3个简单的sudo命令,永远不必再使用sudo进行全局npm安装:
sudo chown -R $(whoami) /usr/local/lib/node_modules
sudo chown -R $(whoami) /usr/local/bin
sudo chown -R $(whoami) /usr/local/share
答案 14 :(得分:-2)
我找到的最佳解决方案是将tar包中的Node.js安装到用户主目录&amp;链接lib文件夹位置。这是你需要做的事情
这将在〜/ .local /下安装Nodejs,而不是默认的/ usr / local /
Add this to your ~/.npmrc (create the file if it doesn't exist already):
root = /home/YOUR-USERNAME/.local/lib/node_modules
binroot = /home/YOUR-USERNAME/.local/bin
manroot = /home/YOUR-USERNAME/.local/share/man
Download the Nodejs source code from nodejs.org and install it under your ~/.local tree:
tar xf node......
cd node........
./configure --prefix=~/.local
make
make install
Create ~/.node_modules symlink. (This directory will be automatically searched when you load modules using require "module" in scripts. I'm not sure why Node doesn't search ~/.local/lib/node_modules by default.)
cd
ln -s .local/lib/node_modules .node_modules
Is ~/.local/bin in your path? Type
which npm
If it says ~/.local/bin/npm, you're done.
Otherwise, do this...
export PATH=$HOME/.local/bin:$PATH
...and add that line to your ~/.profile file, so it'll run every time you log in.
如果在安装软件包时仍遇到所有权或权限错误,请通过运行
更改〜/ .local / dir的所有权chown -R user:user ~/.local/
现在你应该通过&nbsp;&nbsp;&#39;
来安装软件包注意:以上所有命令均以用户身份运行。不要使用SUDO或ROOT LOGIN
永远不会更改“/ USR / LIB /”之下的文件夹的许可。将导致不稳定的操作系统