134

我刚刚重新安装了 Ubuntu 12.04 LTS,然后我先做了这些步骤

  1. 使用以下脚本通过包管理器安装节点

    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
    
  2. 尝试在全球范围内安装 yeoman, express, n, yeoman 的生成器,它们都返回相同的错误

    npm 错误!错误:EACCES,符号链接 '../lib/node_modules/n/bin/n'

    npm 错误!{ [错误:EACCES,符号链接'../lib/node_modules/n/bin/n'] errno:3,代码:'EACCES',路径:'../lib/node_modules/n/bin/n'}

    npm 错误!

    npm 错误!请尝试以 root/管理员身份再次运行此命令。

    npm 错误!系统 Linux 3.8.0-29-generic

    npm 错误!命令“/usr/bin/node”“/usr/bin/npm”“安装”“-g”“-d”“n”

    npm 错误!cwd /home/heberlz

    npm 错误!节点-v v0.10.20

    npm 错误!npm -v 1.3.11

    npm 错误!路径 ../lib/node_modules/n/bin/n

    npm 错误!代码 EACCES

    npm 错误!错误号 3

    npm 错误!堆栈错误:EACCES,符号链接'../lib/node_modules/n/bin/n'

    npm 错误!

    npm 错误!可以在以下位置找到其他日志记录详细信息:

    npm 错误!/home/heberlz/npm-debug.log

    npm 错误!不好的代码 0

  3. 以递归方式收回以下文件夹的所有权~/.npm、/usr/lib/node、/usr/lib/node_modules 以及以下符号链接 /usr/bin/node、/usr/bin/nodejs的所有权,但绝对没有成功

我需要在没有 sudo 的情况下安装 yeoman 及其生成器,以免以后遇到麻烦:(

4

15 回答 15

326

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 的这个答案

于 2014-02-11T20:12:37.830 回答
23

如果你已经$HOME/bin在你的路径中,一个更简单的解决方案就是......

npm config set prefix ~
  • 新的节点命令现在将安装到您的$HOME/bin目录中。
  • 无需更改路径!

由于此讨论实际上是关于降低运行的安全风险sudo,因此您还应该知道,任何节点应用程序都可能安装与您认为正在安装的已注册节点包名称不匹配的应用程序名称。因此存在安全风险,即npm install替换现有系统命令或您在$HOME/bin. 如果您担心,请先检查您要安装的应用程序文件中的binscripts属性。package.json

一般来说,最安全的做法是:

  • (a) 将$HOME/binlast 放在您的路径中,这样系统命令就不会被取代。
  • (b) 不包括“.” 或您的任何相对路径,$PATH这样您就不会意外运行恰好位于当前目录中的命令。

参考:

于 2014-08-06T03:10:30.287 回答
12

As for October 2014:

Node.js is available from the NodeSource Debian and Ubuntu binary distributions repository.

curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs

That's it.

Outdated answer:

The fastest way without using sudo is like described here by isaac

I strongly encourage you not to do package management with sudo! Packages can run arbitrary scripts, which makes sudoing a package manager command as safe as a chainsaw haircut. Sure, it's fast and definitely going to cut through any obstacles, but you might actually want that obstacle to stay there.

I recommend doing this once instead:

sudo chown -R $USER /usr/local

EDIT:

There are certain security concerns and functionality limitations regarding changing the ownership of /usr/local to the current user:

Having said that, if you want to install global module without using sudo, I don't see any better solution (from pragmatic point of view) than mentioned. Security vs easy of use is very broad topic, and there is no easy answer for that - it just depends on your requirements.

于 2013-10-14T08:06:57.733 回答
11

问题是我使用 sudo 安装了节点,以避免在全局安装 npm 模块时出现错误,必须永远不要使用 sudo 安装节点。

我的解决方案是以这种方式重新安装节点:

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

tar -zxf node-v0.10.20.tar.gz #解压缩源

cd node-v0.10.20 #进入解压文件夹

sudo chown -R $USER /usr/local

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

需要注意的一件事是,在我的情况下,仅获取 /usr/local 文件夹的所有权是行不通的,因为节点安装本身是使用 sudo 进行的

安装 yeoman 的最后一步:#虽然在 yeoman.io 上说执行“npm install -g yo”已经安装了 bower 和 grunt,但是 grunt 的一些子模块失败了,所以我通过自行安装来解决这个问题

npm install -g 凉亭

npm 安装 -g 咕噜声

npm install -g 哟

npm install -g generator-angular

于 2013-10-14T06:11:42.490 回答
5

我用环境变量和shell别名解决了这个问题:

export NPM_PREFIX=$HOME/node
alias npmg="npm -g --prefix $NPM_PREFIX"

对我来说,npm 不尊重 .npmrc 中的“前缀”配置设置。

于 2014-06-07T19:05:03.140 回答
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

于 2017-07-31T10:30:27.867 回答
2

根据这个类似的SO帖子:npm throws error without sudo

看起来您可能对~/.npm目录有所有权问题。

与那个答案一样,请尝试:

sudo chown -R `whoami` ~/.npm
于 2014-04-04T04:46:24.363 回答
1

如果您在开发机器上,最好考虑使用nvm

如果没有,您只想使用您最喜欢的包管理器进行安装。

不管是什么情况,我建议在stackoverflow上检查这个答案

于 2015-02-20T15:30:10.210 回答
1

实际上,我只是更改了 root 拥有的用户文件夹的权限:

sudo chown -R $USER ~/.config/configstore

然后我可以在没有 sudo 的情况下“npm install”和“bower install”!工作得很好!

于 2015-11-25T18:31:09.493 回答
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

查看这篇文章,了解如何在没有 sudo 的情况下安装Node.js。

有关此主题的更通用解决方案(即,在本地安装软件),请参阅dotsoftware

于 2015-03-18T14:08:50.513 回答
0

使用 lubuntu 14.04.3,我尝试更改 .npm 和 npm 前缀的所有权,更新了我的路径,npm 将模块安装到我的主目录而没有 sudo 但路径不正确,因此找不到像 ember 这样的模块,linuxbew解决了问题,快此处为 node/npm设置指南

于 2015-12-08T23:43:37.723 回答
0

为了在本地安装 Node.js 和 npm 而不必使用 sudo 打开终端并输入:

 echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
    . ~/.bashrc
    mkdir ~/local
    mkdir ~/node-latest-install
    cd ~/node-latest-install
    wget -c http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1
    ./configure --prefix=~/local
    make install 
    wget -c https://www.npmjs.org/install.sh | sh 
于 2021-06-12T17:56:42.820 回答
0

只需使用 nvm,您就可以在不同的节点版本之间动态切换,并为您的用户在本地安装它。不需要 sudo。只要确保您事先已完全清理旧节点即可。

https://github.com/nvm-sh/nvm

于 2020-04-23T04:36:24.497 回答
-2

我找到的最佳解决方案是将 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/ 目录的所有权

chown -R user:user ~/.local/

现在你应该可以通过“npm”安装包了

注意:以上所有命令都必须以用户身份运行。不要使用 SUDO 或 root 登录

永远不要更改“/USR/LIB/”下文件夹的权限。将导致不稳定的操作系统

于 2014-07-02T05:40:07.193 回答
-2

我发现Pawel Grzybek 的解释非常有说服力:它们归结为 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
于 2016-10-28T15:36:14.760 回答