没有sudo,NPM模块将不会安装在全局中
我刚刚重新安装了Ubuntu 12.04 LTS,在做任何其他事情之前,我做了这些步骤 :
-
通过包pipe理器使用以下脚本安装节点
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,expression,全球yeoman的发电机,他们都返回了同样的错误
npm ERR! 错误:EACCES,符号链接'../lib/node_modules/n/bin/n'
npm ERR! {[Error:EACCES,symlink'../lib/node_modules/n/bin/n'] errno:3,code:'EACCES',path:'../lib/node_modules/n/bin/n'}
npm ERR!
npm ERR! 请尝试以root / Administrator身份再次运行此命令。
npm ERR! 系统Linux 3.8.0-29-通用
npm ERR! 命令“/ usr / bin / node”“/ usr / bin / npm”“install”“-g”“-d”“n”
npm ERR! cwd / home / heberlz
npm ERR! 节点-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! errno 3
npm ERR! 堆栈错误:EACCES,符号链接'../lib/node_modules/n/bin/n'
npm ERR!
npm ERR! 其他日志logging详细信息可以在
npm ERR! /home/heberlz/npm-debug.log
npm ERR! 不好的代码0
-
回收以下文件夹的所有权 – 〜/ .npm,/ usr / lib / node,/ usr / lib / node_modules,以及符号链接/ usr / bin / node,/ usr / bin / nodejs ,绝对没有成功
我需要安装yeoman和它的发电机没有sudo不会麻烦后来:(
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
如果您的path中已经有$HOME/bin
,则更简单的解决scheme就是…
npm config set prefix ~
- 新节点命令现在将安装到您的
$HOME/bin
目录中。 - 没有必要改变你的道路!
由于这个讨论实际上是为了降低运行sudo
的安全风险,所以你应该知道,任何节点应用程序都可能会安装一个与你认为正在安装的注册节点包名称不匹配的应用程序名称。 所以安全风险是npm install
会replace现有的系统命令或者你已经在$HOME/bin
。 如果您担心,请首先检查您正在安装的应用程序的package.json
文件中的bin
和scripts
属性。
一般来说,最安全的做法是:
- (a)将
$HOME/bin
放在最后的path中,这样系统命令就不会被取代。 - (b)不包括“。” 或
$PATH
任何相对path,所以你不会意外地运行恰好在当前目录中的命令。
参考:
- package.json属性
- npm安装
- NodeJS安全漏洞: nodesecurity.io 。
截至2014年10月:
Node.js可以从NodeSource Debian和Ubuntu二进制发布版本库获得 。
curl -sL https://deb.nodesource.com/setup | sudo bash - sudo apt-get install -y nodejs
而已。
过时的回答:
不使用sudo最快的方法就像isaac在这里描述的一样
我强烈build议你不要用sudo做包pipe理! 软件包可以运行任意脚本,这使得一个包pipe理器命令可以像链锯理发一样安全。 当然,这个速度很快,肯定会克服任何障碍,但是你可能真的想把这个障碍留在那里。
我build议这样做一次:
sudo chown -R $USER /usr/local
编辑:
有关将/ usr / local的所有权更改为当前用户的某些安全问题和function限制:
- 如果机器上有其他用户可以使用全局npm软件包,请不要更改/ usr / local的所有权
- https://apple.stackexchange.com/questions/1393/are-my-permissions-for-usr-local-correct
- https://askubuntu.com/questions/261326/is-it-safe-to-chown-usr-local
话虽如此,如果你想不使用sudo来安装全局模块,我没有比提到的更好的解决scheme(从实用的angular度来看)。 安全性vs易用性是非常广泛的话题,并不是一个简单的答案 – 它只是取决于你的要求。
问题是我使用sudo安装了节点 ,为了避免在全局安装npm模块时出现错误,一定不要用sudo安装节点。
我的解决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 -R $ USER / usr / local
./configure –prefix = / usr / local && make && make install
有一件事要注意的是,只取得/ usr / local文件夹的所有权将不会在我的情况下工作,因为节点安装本身是用sudo
最后一步安装yeoman:#yeough.io在yeoman.io上说它做的“npm install -g yo”已经安装了bower和grunt,还有一些grunt的子模块失败了,所以我通过自己安装
npm install -g bower
npm install -g grunt
npm install -g哟
npm install -g generator-angular
我用环境variables和shell别名解决了这个问题:
export NPM_PREFIX=$HOME/node alias npmg="npm -g --prefix $NPM_PREFIX"
对我来说,npm并不遵守.npmrc中的“前缀”configuration设置。
根据这个类似的SOpost: npm抛出没有sudo的错误
看起来你可能有~/.npm
目录的所有权问题。
就像那个答案一样,试试:
sudo chown -R `whoami` ~/.npm
实际上,我只是改变了root所拥有的用户文件夹的权限:
sudo chown -R $USER ~/.config/configstore
那么我可以不用sudo就可以“npm install”和“bower install”! 工作很好!
如果你使用的是开发机器,那么考虑使用nvm可能会更好。
如果没有,你只需要使用你最喜欢的包pipe理器来安装。
不pipe是什么情况,我build议在stackoverflow上检查这个答案
使用lubuntu 14.04.3,我试图改变.npm和npm前缀的所有权,更新我的path,npm安装模块到我的主目录没有sudo,但path是不正确的,所以没有find类似余烬的模块, linuxbew解决了问题,快安装指南在这里节点/ NPM
这个问题和其他原因造成的,可以通过在用户空间中安装Node来解决。
你可以把它复制粘贴到你的terminal中
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
同样的命令也可以启动,以获得节点更新到最新版本。
不要忘记编辑你的环境。 只有一次,做
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
看看这篇文章作为一个reabout如何安装Node.js没有sudo 。
有关此主题的更一般解决scheme(即在本地安装软件),请参阅点阵软件。
findnpm目录的path:
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
我发现Pawel Grzybek的解释非常有说服力:他们归结为3个简单的sudo命令,从不再为全局npm安装使用sudo:
sudo chown -R $(whoami) /usr/local/lib/node_modules sudo chown -R $(whoami) /usr/local/bin sudo chown -R $(whoami) /usr/local/share
我发现的最佳解决scheme是从tar包安装Node.js到用户主目录并链接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/
现在你应该很好地通过'npm'来安装包,
注意:以上所有命令均以用户身份运行。 不要使用SUDO或ROOTlogin
“/ USR / LIB /”之下从未改变文件夹的权限。 将导致不稳定的操作系统